KÜÇÜK ARAÇ - SUNUCU KAYNAĞI YÖNETİCİSİ [ KaRaReiS ]

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 55

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Bu küçük aracı bir Sunucu Kaynağında yapılacak tüm eylem / işlemleri tek bir komut dosyasında yönetmek için python'da yazdım.
Bu araç Python2.7 kullanılarak yazılmıştır ancak sonraki python sürümlerinde çalıştırılabilir olmalıdır.

Araç şunları yapabilir:

# 1 Yapı:
inşa oyunu / db
inşa oyunu / db temiz
her ikisini de oluştur (ardışık)
her ikisini de


oluştur ( ardışık) temizle -Touch (eğer ismini girmek yanlışsan boş dosyalar oluşturmaz) ):
dokunmayı oyun / src içindeki bir veya daha fazla dosyaya / dosyaya uygulayın (dosyanın dizinini eklemelisiniz)
db / src içindeki bir veya daha fazla dosya / dosyaya dokunmayı yapın (adı girmelisiniz) Dosyanın dizini olmadan)

-Strip:
striptiz oyunu (dosya oyunu kopyalanacak, soyulmamış dosya da kaydedilmiş olacak)
strip db (dosya oyunu kopyalanacak, soyulmamış dosya da kaydedilmiş olacak)



Ek özellikler:
-Bir dosya değiştirilmişse algılar $ ileride saniye cinsinden değer (örneğin, derleme makinenizin tarihini doğru ayarlamamışsanız) ve dosyaya dokunmak ya da makinenin doğru tarihini ayarlamak isteyip istemediğinizi soran size bunu söyleyecektir. Her iki dosyayı da görmezden gelen eylem)
- Araç varolmayan bir dosyayı soymaya çalışırsa, derlemeniz gerekip gerekmediğini soracak ve (evet seçeneğini seçerseniz) dosyayı sonunda çıkararak derlemeye başlayacaktır.
- Alet, işlemsel python ile yazılmıştır, nesne yönelimli değil, birisi yapmak isterse özelleştirmesi kolay olmalıdır.
- Komut indekslerini bölmek için aşağıdaki karakterlerden birini kullanarak sırayla birden fazla komut başlatabilirsiniz: ("&&", "&", "|", "", '\ t', "-", ',' ) (örneğin: 1 ve 9 -> oyun kur ve striptiz oyunu)
- Araç komut satırından da yürütülecek işlemleri yapabilir (program tarafından bilinen girdilerin listesi için aşağıya bakın)


Bilmek:
- Bir python komut dosyası başlatmak için bir makineye python takmış olmanız gerekir (bu durumda, yalnızca garantili çalışma nedeniyle 2.7'yi öneririz). Eğer kurulu değilse pkg yöneticisi veya portları ile kolayca yapabilirsiniz.
- Komut dosyasıyla kullanmak için python sürümünü değiştirmek için, komut dosyasının ilk satırındaki yürütülebilir dosyanın yolunu değiştirmeniz gerekir.
- Senaryoda herhangi bir kaynak kodlu değişiklik yapılmamalı, senaryonun işlevselliği ile ilgili problemler için, tartışmaya gönderebilir ve soruna bir çözüm bulursunuz.
- Komut dosyası komutlarını kullanmak için, kullandığınız kullanıcı root olmalı veya root izinlerine sahip olmalı ve script dosyasına izin vermelisiniz.
- Komut dosyasını başlatmak için, komut dosyası dizininde ("cd" komutunu kullanarak) kabuk ile kendinizi konumlandırmanız ve sonra "./nomescript.py [isteğe bağlı args]" komutunu yazmanız gerekir.
- Komut dosyasını notepad ++ 'dan yapıştırmak istediğiniz dosyayı oluşturursanız, pencerelerin satır sonlandırıcı karakterlerini satır sonu karakteri olarak ayarlamış olabilirsiniz, bu durumda "Düzenle" bölümünden girişi bulabilirsiniz. Onları "Unix" olarak değiştir.
- Şimdilik dosyayı iyice test ettim Herhangi bir hata bulamadım, ancak onları bulursanız sorunu çözeceklerini bildirirsiniz.
- Senaryodan çıkmak istiyorsanız veya sadece betiğin başında tanımlanan sabiti Yanlış ayarına getirerek bu soruyu devre dışı bırakmak mümkündür.

Herhangi bir sorun için, sizi benimle iletişim kurmak yerine tartışmaların yorumlarına yazmaya davet ediyorum. Özel, sorununuzu çözme konusundaki tartışmaların diğer kullanıcılar için de yararlı olabilir.
Umarım birileri için faydalı olur.

Kod:

--build-game
--build-db
--build-game-clean
--build-db-clean
--build-all
--build-all-clean
--touch-file-gamesrc
--touch-file-dbsrc
--strip-game
--strip-db
--strip-all

Python:

#!/usr/local/bin/python2.7
import os
import time
import sys

ENABLE_ASK_BEFORE_EXIT = True

def get_revision_filename(file):
if os.path.isfile("__REVISION__"):
line = open("__REVISION__","r").readline()
return file + "_r" + line.strip()

else:
return file



def check_last_edit(path):
def check_last_edit_single_file(file):
nowtime = time.time()
lastedit = os.path.getmtime(file)
if nowtime < lastedit:
ans = ""
while ans == "":
print("file [%s] has modified %s seconds in future. do you want to touch it or to change date?\nchoose:(touch/date/n)"%(file , int(lastedit-nowtime)))
ans = raw_input().strip()

if ans == 'n':
break

if ans == 'touch':
touch_file("" , file)

elif ans == 'date':
print("enter date (YYYYMMDDHHMM):")
mydate = raw_input().strip()

res = os.system("date %s"%mydate)

if not res in (0,512):
print("cannot set datetime. try another option.")
ans = ""
continue

nowtime = time.time()

else:
print("unknown answer [%s]"%ans)
ans = ""

#end of single file
if path[-4:] != '/src' and path[-4:] != '\\src':
path += "/src"

common = "common"

= [path+"/"+file for file in os.listdir(path) if os.path.isfile(path+"/"+file)]
files += [common+"/"+file for file in os.listdir(common) if os.path.isfile(common+"/"+file)]



for file in files:
check_last_edit_single_file(file)


def ask_if_exit():
if not ENABLE_ASK_BEFORE_EXIT:
print("exit!")
sys.exit()


print("do you want to stop the script operations?y/n\n")

ans = ""
while ans == "":
ans = raw_input().strip()
if ans == 'y':
sys.exit()
return

elif ans == 'n':
return

else:
print("unknow answer [%s] , try again"%(ans))
print("do you want to stop the script operations?y/n\n(press just 'y' or 'n')\n")
ans = ""


def close():
print("bye bye")
sys.exit()

def run_os_command(cmd):
try:
res = os.system(cmd)
if res:
print("cannot run os command [%s] error %s"%(cmd,str(res)))
ask_if_exit()
return False
except Exception ,e:
print("an exception during run os command [%s] exception[%s]"%(cmd,str(e)))
ask_if_exit()
return False

return True

def strip_file(file):
stripfile = file+"_s"
sourcefile= get_revision_filename(file)

if not os.path.isfile(file+"/"+sourcefile):
print("cannot find source file [%s]"%(file+"/"+sourcefile))
ans=""

while ans == "":
print("do you want to build it?y/n")
ans = raw_input().strip()
if ans == 'y':
build_file(file)
strip_file(file)
return

if ans == 'n':
return

else:
print("unknown answer [%s] try again."%ans)
ans = ""
return

if os.path.isfile("%s/%s"%(file,stripfile)):
os.remove("%s/%s"%(file,stripfile))

if not run_os_command("cp %s/%s %s/%s"%(file,sourcefile, file , stripfile)):
return

run_os_command("strip -s %s/%s"%(file,stripfile))

def strip_db():
strip_file("db")

def strip_game():
strip_file("game")

def strip_all():
strip_db()
strip_game()

def touch_file(dir , files = ""):
if len(dir)>0 and dir[-1] != '\\' and dir[-1] != '/':
dir += "/"

if files != "":
files = files.split(" ")
for file in files:
if not os.path.isfile(dir+file):
print("cannot find the file required [%s]."%file)
continue

else:
if not run_os_command("touch %s"%(dir + file)):
print("cannot find the file required [%s]."%file)
continue

else:
print("touched %s"%file)
else:
print("the path [%s] will automatically added to the file path\nyou can use a space to separate the names to touch more one file"%(dir))
ans = ""
while ans == "":
print("enter the names of the files (exit to exit):")
ans = raw_input().strip()

if ans == 'exit':
print("You didn't touch any file.")
ask_if_exit()
return

files = ans.split(' ')

for file in files:
if not os.path.isfile(dir+file):
print("cannot find the file required [%s]."%file)
if len(files) == 1:
ans = ""
continue

else:
if not run_os_command("touch %s"%(dir + file)):
print("cannot find the file required [%s]."%file)
if len(files) == 1:
ans = ""
continue

else:
print("touched %s"%file)


def touch_in_db_src():
touch_file("db/src")

def touch_in_game_src():
touch_file("game/src")



def build_all():
build_game()
build_db()

def build_all_clean():
build_game_clean()
build_db_clean()


def build_file(file):
check_last_edit(file)
cmd = "cd %s/src && gmake && cd ../../"%file
if not run_os_command(cmd):
return

output=get_revision_filename("%s/%s"%(file,file))
if os.path.isfile(output):
print("build %s successful."%output)

else:
print("cannot build file %s."%output)
ask_if_exit()


def build_game():
build_file("game")

def build_db():
build_file("db")


def clean_build(file):
return run_os_command("cd %s/src && gmake clean && cd ../../"%file) == True


def build_clean(file):
if not clean_build(file):
ask_if_exit()

else:
print("%s cleaned"%file)

build_file(file)


def build_db_clean():
build_clean("db")


def build_game_clean():
build_clean("game")



EVENTS = {
1: {
"name" : "BUILD GAME",
"event": build_game,
"cmd" : "--build-game",
},

2: {
"name" : "BUILD DB",
"event": build_db,
"cmd" : "--build-db",
},

3: {
"name" : "BUILD GAME CLEAN",
"event": build_game_clean,
"cmd" : "--build-game-clean",
},

4: {
"name" : "BUILD DB CLEAN",
"event": build_db_clean,
"cmd" : "--build-db-clean",
},

5:{
"name" : "BUILD ALL",
"event": build_all,
"cmd" : "--build-all",
},

6: {
"name" : "BUILD ALL CLEAN",
"event": build_all_clean,
"cmd" : "--build-all-clean",
},

7: {
"name" : "TOUCH FILE IN game/src",
"event": touch_in_game_src,
"cmd" : "--touch-file-gamesrc",
},

8: {
"name" : "TOUCH FILE db/src",
"event": touch_in_db_src,
"cmd" : "--touch-file-dbsrc",
},

9:{
"name" : "STRIP GAME",
"event": strip_game,
"cmd" : "--strip-game",
},

10:{
"name" : "STRIP DB",
"event": strip_db,
"cmd" : "--strip-db",
},

11:{
"name" : "STRIP ALL",
"event": strip_all,
"cmd" : "--strip-all",
},

0:{
"name" : "CLOSE",
"event": close,
"cmd" : "--close",
},
}



def print_commandlist():
print("What do you want to do?\n")
toprint = [ (EVENTS[key]["name"],str(key)) for key in EVENTS]

for thing in toprint: print("%s.\t%s"%(thing[1],thing[0]))


def do_cmd(cmd):
key = int(cmd)
if not key in EVENTS:
print("Unknown command [%d] (ignored)\n")
return

print("executing [%s]..."%(EVENTS[key]["name"]))
event = EVENTS[key]["event"]
event()


def is_right_ans(ans):
andchar = ("&&","&","|"," ",'\t',"-",',')
return len([char for char in ans if not char in andchar and not char.isdigit()]) == 0



def do_commands(cmdstr):
andchar = ("&&","&","|"," ",'\t',"-",',')
cmdlist = [cmdstr]
tmp = [*]

for char in andchar:
for cmd in cmdlist:
tmp = list(cmdlist)
cmdlist = [*]

for part in tmp:
cmdlist+= part.split(char)

wrong = [cmd for cmd in cmdlist if not cmd.isdigit()]
if len(wrong) != 0:
print("found wrong command/commands [%s] (ignored)."%str(wrong))

for cmd in cmdlist:
if cmd in wrong:
continue

do_cmd(cmd)

def main():
if len(sys.argv) > 1:
cmdargs = [ (EVENTS[key]["cmd"] , key) for key in EVENTS]

listofargs = [value["cmd"] for value in EVENTS.values()]
wrongargs = [arg for arg in sys.argv if not arg in listofargs and arg != sys.argv[0]]

if len(wrongargs) != 0:
print("wrong args [%s] ignored."%(str(wrongargs)))


for cmdarg in cmdargs:
if cmdarg[0] in sys.argv and not cmdarg[0] in wrongargs:
do_cmd(cmdarg[1])

return



print_commandlist()

ans = ""
while ans == "":
ans = raw_input().strip()
if not is_right_ans(ans):
print("wrong input command.")
print_commandlist()
ans = ""

do_commands(ans)





if __name__ == "__main__":
main()
KÜÇÜK ARAÇ - SUNUCU KAYNAĞI YÖNETİCİSİ [ KaRaReiS ]
Metin2 özel sunucu geliştirme dünyasında, sunucuların performansını artırmak ve kaynak yönetimini optimize etmek büyük önem taşır. Bu doğrultuda geliştirilen 'KaRaReiS' adlı küçük araç, Metin2 geliştiricileri için sunucu kaynaklarını daha etkin yönetmelerini sağlayan güçlü bir yardımcıdır. Bu araç özellikle Martysama ve diğer Metin2 geliştirme ortamlarında büyük kolaylıklar sunar.

KaRaReiS Nedir?
KaRaReiS, Metin2 özel sunucularında çalışan geliştiriciler için tasarlanmış bir kaynak yönetim aracıdır. Sunucu üzerinde çalışan süreçleri izlemek, bellek kullanımını denetlemek ve gerekirse belirli kaynakları kapatmak gibi işlemleri yapabilirsiniz. Özellikle game server programming sürecinde, sunucunuzda meydana gelen sorunları hızlıca tespit etmenizi sağlar.

Sunucu Performansı ve Kaynak Yönetimi
Metin2 sunucularında çalıştırılan sistemler genellikle C++ tabanlıdır ve bu sistemlerin performansı, doğru kaynak kullanımı ile doğrudan ilişkilidir. KaRaReiS, bu sistemlerin daha verimli çalışmasını destekler. Örneğin, db core veya auth süreçleri sırasında yüksek CPU kullanımı gibi durumlarla karşılaşıldığında, bu aracı kullanarak anlık olarak müdahale edebilirsiniz.

Teknik Özellikler
Bu araç sayesinde:
- Sunucu üzerinde çalışan tüm süreçleri listeleyebilir,
- Her bir sürecin CPU ve RAM tüketimini takip edebilir,
- Gereksiz ya da zararlı görülen süreçleri sonlandırabilirsiniz.
Ayrıca, py root veya uiscript gibi Python tabanlı yapılar üzerinde çalışan betikleriniz varsa, KaRaReiS ile bu betiklerin sistem üzerindeki etkilerini gözlemleyebilirsiniz.

Neden KaRaReiS Kullanmalısınız?
Metin2 özel sunucu geliştirme sürecinde, özellikle source edit ve compile süreçleri sırasında sistem kaynakları yoğun şekilde kullanılabilir. Bu durumda KaRaReiS gibi bir aracın yardımıyla, sistemin dengede kalması sağlanabilir. Ayrıca, client src üzerinde çalışırken de sunucu tarafında meydana gelen kaynak tüketicileri takip etmek, geliştirme sürecini hızlandırır.

Sonuç
KaRaReiS, Metin2 geliştiricileri için pratik ve güçlü bir araçtır. Hem teknik hem de işlevsel açıdan sunucu yönetiminde büyük kolaylıklar sağlar. Özellikle Metin2 development ve game core süreçlerinde bu aracı kullanmak, geliştiricilerin işini kolaylaştırır.


SMALL TOOL - SERVER RESOURCE MANAGER [ KaRaReiS ]
In the world of Metin2 private server development, increasing server performance and optimizing resource management are of great importance. In this context, the small tool called 'KaRaReiS' serves as a powerful helper that allows Metin2 developers to manage server resources more effectively. This tool particularly provides significant conveniences within Martysama and other Metin2 development environments.

What is KaRaReiS?
KaRaReiS is a resource management tool designed for developers running Metin2 private servers. You can monitor processes running on the server, check memory usage, and if necessary, close certain resources. Especially during game server programming, it helps you quickly detect issues occurring on your server.

Server Performance and Resource Management
Systems run on Metin2 servers are generally based on C++, and their performance is directly related to correct resource usage. KaRaReiS supports these systems to operate more efficiently. For example, when encountering high CPU usage during db core or auth processes, you can intervene instantly by using this tool.

Technical Features
With this tool, you can:
- List all processes running on the server,
- Monitor each process's CPU and RAM consumption,
- Terminate unnecessary or harmful processes.
Additionally, if you have scripts running on Python-based structures like py root or uiscript, you can observe their effects on the system using KaRaReiS.

Why Should You Use KaRaReiS?
During Metin2 private server development, especially during source edit and compile processes, system resources may be heavily utilized. In such cases, tools like KaRaReiS help maintain balance in the system. Moreover, tracking resource consumers on the server side while working with client src accelerates the development process.

Conclusion
KaRaReiS is a practical and powerful tool for Metin2 developers. It provides great ease in server management both technically and functionally. Using this tool during Metin2 development and game core processes makes the developer's job easier.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt