SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

Помощ с Python

Drago

Админ
Здравейте,
Имам 3 идентични питон скрипта плъгини към http://dag.wieers.com/home-made/dstat/

При опит да ги използвам ми връща непонятна за мен грешка. Писах на създателя им, но човека в момента не разполага със среда в която може да експериментира. Има ли някой който разбира от питон да опитаме да ги поправим или поне да ми обясни какво правят за да опитам да ги пренапиша на perl. Благодаря предварително.
 
Re: Помощ с Python

Здравейте,
Имам 3 идентични питон скрипта плъгини към http://dag.wieers.com/home-made/dstat/

При опит да ги използвам ми връща непонятна за мен грешка. Писах на създателя им, но човека в момента не разполага със среда в която може да експериментира. Има ли някой който разбира от питон да опитаме да ги поправим или поне да ми обясни какво правят за да опитам да ги пренапиша на perl. Благодаря предварително.

дай да видим грешката и скриптовете.
 
Re: Помощ с Python

Това е единия скрипт :

Код:
### Author: Dag Wieers <dag@wieers.com>

#Version: 2.2
#VEID   user    nice    system   uptime     idle             strv   uptime          used           maxlat  totlat  numsched
#302    142926  0       10252    152896388  852779112954062  0      427034187248480 1048603937010  0       0       0
#301    27188   0       7896     152899846  853267000490282  0      427043845492614 701812592320   0       0       0

class dstat_plugin(dstat):
    def __init__(self):
        self.nick = ('usr', 'sys', 'idl', 'nic')
        self.type = 'p'
        self.width = 3
        self.scale = 34
        self.open('/proc/vz/vestat')
        self.cols = 4

    def check(self):
        info(1, 'Module %s is still experimental.' % self.filename)

    def discover(self, *list):
        ret = []
        for l in self.splitlines():
            if len(l) < 6 or l[0] == 'VEID': continue
            ret.append(l[0])
        ret.sort()
        for item in list: ret.append(item)
        return ret

    def name(self):
        ret = []
        for name in self.vars:
            if name == 'total':
                ret.append('total ve usage')
            else:
                ret.append('ve ' + name + ' usage')
        return ret

    def vars(self):
        ret = []
        if not op.full:
            list = ('total', )
        else:
            list = self.discover
        for name in list:
            if name in self.discover + ['total']:
                ret.append(name)
        return ret

    def extract(self):
        global l
        self.set2['total'] = [0, 0, 0, 0]
        for line in self.splitlines():
            if len(l) < 6 or l[0] == 'VEID': continue
            name = l[0]
            self.set2[name] = ( long(l[1]), long(l[3]), long(l[4]) - long(l[1]) - long(l[2]) - long(l[3]), long(l[2]) )
            self.set2['total'] = ( self.set2['total'][0] + long(l[1]), self.set2['total'][1] + long(l[3]), self.set2['total'][2] + long(l[4]) - long(l[1]) - long(l[2]) - long(l[3]), self.set2['total'][3] + long(l[2]) )
        for name in self.vars:
            for i in range(4):
                self.val[name][i] = 100.0 * (self.set2[name][i] - self.set1[name][i]) / (sum(self.set2[name]) - sum(self.set1[name]))
        if step == op.delay:
            self.set1.update(self.set2)

# vim:ts=4:sw=4:et


А това е грешката която връща :

dstat --vz-cpu
Module dstat_vz_cpu is still experimental.
Traceback (most recent call last):
File "/usr/bin/dstat", line 2554, in ?
main()
File "/usr/bin/dstat", line 2416, in main
scheduler.run()
File "/usr/lib64/python2.4/sched.py", line 105, in run
void = action(*argument)
File "/usr/bin/dstat", line 2510, in perform
o.extract()
File "/usr/share/dstat/dstat_vz_cpu.py", line 53, in extract
if len(l) < 6 or l[0] == 'VEID': continue
NameError: global name 'l' is not defined
 
Re: Помощ с Python

отвори /usr/share/dstat/dstat_vz_cpu.py.
отиди на ред 51:
там в оригинала пише:
for line in self.splitlines():
смени го на:
for l in self.splitlines():

грешката е синтактична. дано ти върши работа този фикс :)
 
Re: Помощ с Python

отвори /usr/share/dstat/dstat_vz_cpu.py.
отиди на ред 51:
там в оригинала пише:
for line in self.splitlines():
смени го на:
for l in self.splitlines():

грешката е синтактична. дано ти върши работа този фикс :)

сега работи ти?
 
Re: Помощ с Python

Добро утро на всички :)

Да сега тръгна благодаря за помоща остават още 2 скрипта ето го и втория :

Код:
### Author: Dag Wieers <dag@wieers.com>

### Example content for /proc/bc/<veid>/ioacct
#       read                         2773011640320
#       write                        2095707136000
#       dirty                        4500342390784
#       cancel                       4080624041984
#       missed                                   0
#       syncs_total                              2
#       fsyncs_total                       1730732
#       fdatasyncs_total                      3266
#       range_syncs_total                        0
#       syncs_active                             0
#       fsyncs_active                            0
#       fdatasyncs_active                        0
#       range_syncs_active                       0
#       vfs_reads                       3717331387
#       vfs_read_chars         3559144863185798078
#       vfs_writes                       901216138
#       vfs_write_chars          23864660931174682
#       io_pbs                                  16

class dstat_plugin(dstat):
    def __init__(self):
        self.nick = ['read', 'write', 'dirty', 'cancel', 'missed']
        self.cols = len(self.nick)

    def check(self):
        if not os.path.exists('/proc/vz'):
            raise Exception, 'System does not have OpenVZ support'
        elif not os.path.exists('/proc/bc'):
            raise Exception, 'System does not have (new) OpenVZ beancounter support'
        elif not glob.glob('/proc/bc/*/ioacct'):
            raise Exception, 'System does not have any OpenVZ containers'
        info(1, 'Module %s is still experimental.' % self.filename)

    def name(self):
        return ['ve/'+name for name in self.vars]

    def vars(self):
        ret = []
        if not op.full:
            varlist = ['total',]
        else:
            varlist = [os.path.basename(veid) for veid in glob.glob('/proc/vz/*')]
        ret = varlist
        return ret

    def extract(self):
        for veid in self.vars:
            self.set2['total'] = {}
            for line in dopen('/proc/bc/%s/ioacct' % veid).readlines():
                l = line.split()
                if len(l) != 2: continue
                if l[0] not in self.nick: continue
                index = self.nick.index(l[0])
                self.set2[veid][index] = long(l[1])
                self.set2['total'][index] = self.set2['total'][index] + long(l[1])
#            print veid, self.val[veid], self.set2[veid][0], self.set2[veid][1]
#            print veid, self.val[veid], self.set1[veid][0], self.set1[veid][1]

            for i in range(len(self.nick)):
                self.val[veid][i] = (self.set2[veid][i] - self.set1[veid][i]) / elapsed

        if step == op.delay:
            self.set1.update(self.set2)

# vim:ts=4:sw=4:et

И съответно грешката която връща :

File "/usr/share/dstat/dstat_vz_io.py", line 52, in extract
for line in dopen('/proc/bc/%s/ioacct' % veid).readlines():
File "/usr/bin/dstat", line 1672, in dopen
raise Exception, 'File %s does not exist' % filename
Exception: File /proc/bc/total/ioacct does not exist
 
Re: Помощ с Python

и във втория е същата грешка. отиди на ред 52 в /usr/share/dstat/dstat_vz_io.py:

там е:
for line in dopen('/proc/bc/%s/ioacct' % veid).readlines():
трябва да стане:
for l in dopen('/proc/bc/%s/ioacct' % veid).readlines():

но не съм го тествал, щото бързам :) успех!
 
Re: Помощ с Python

Тцък тук не стана върна ми тази грешка :

File "/usr/share/dstat/dstat_vz_io.py", line 52, in extract
for l in dopen('/proc/bc/%s/ioacct' % veid).readlines():
File "/usr/bin/dstat", line 1672, in dopen
raise Exception, 'File %s does not exist' % filename
Exception: File /proc/bc/total/ioacct does not exist
 
Re: Помощ с Python

Тцък тук не стана върна ми тази грешка :

/proc/bc/total/ioacct този файл има ли го на харда и скрипта има ли права да го чете/пише?
 
Re: Помощ с Python

Изобщо не трябва да има такъв файл.

хмм знам ли от това се оплаква, че го няма. сигурен ли си че не трябва. защо мислиш така?
малко е сложно да дебъгваш така, тъй като тези скриптове просто дефинират класове, подкласове на dstat. който е в отделен скрипт. така виждаме само половината картинка.
 
Re: Помощ с Python

azsym: можеш ли, бате, за момент да погледнеш първо за какво става дума :)

/proc не е стандартна директория с файлове, нито е на диска. има друга грешка в скрипта, която неправилно подава параметър. ще погледна след малко.
 
Re: Помощ с Python

azsym: можеш ли, бате, за момент да погледнеш първо за какво става дума :)

/proc не е стандартна директория с файлове, нито е на диска. има друга грешка в скрипта, която неправилно подава параметър. ще погледна след малко.

еми айде виж го ти тогава
 
Re: Помощ с Python

Не се карайте моля Ви, а ако ще се биете свирнете да дойда да гледам :D
Предполагам, че е синтактична грешка но от тоя смок си нямам и грам понятие. Търсих, но не става да се напише на perl или bash, така че разчитам на вас :)
 
Re: Помощ с Python

Значи в директория /proc/bc/ има директории 101,102,... и в тези директории се намира файл-а ioacct

VEID ми се струва че трябва да е число... та затова ги виждаш 101, 102 ама нека спеца да каже... ама ти сигурен ли си че скрипта има права да чете от там...
 
Re: Помощ с Python

така, в тази част на скрипта има принципна грешка, защото авторът очаква в /proc/vz/* да намери списък с ид-тата на виртуалните машини.
ако не е някакъв зор, ще го погледна по-късно.
а и не съм фен на питона :)
сигурен съм, че може да се препише на нещо по-подходящо ;)
 

Горе