Changeset 7112


Ignore:
Timestamp:
Mar 29, 2018, 2:18:31 PM (2 years ago)
Author:
mabarracus
Message:

wip scheduler improvements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lliurex-analytics-server/trunk/fuentes/lliurex-analytics-server/usr/sbin/analyticsd

    r7111 r7112  
    3838THREADED=True
    3939MAX_SLOW_CHECK_CLIENTS = 30
     40USE_FILE_EVENT_LOG=True
     41USE_FILE_EVENT_DB=False
     42USE_CONFIG_FILE_LOG=True
     43CONFIG_FILE_LOG='/var/run/analyticsd_config.log'
     44FILE_EVENT_LOG='/var/run/analyticsd_event.log'
    4045
    4146if DEBUG:
     
    236241                printea('({}) Operational error on mysql, error is: {}'.format(self.t,e),'error')
    237242                self.init_db()
    238         except Exception:
     243        except Exception as e:
    239244                raise Exception('Error executing: Error=({}) Query=({}) '.format(str(e),kwargs['query']))
    240245
     
    661666        self.loadlist = [ 0.0 ] * 100
    662667        self.max_heap = None
     668        self.last_events = []
    663669
    664670        signal.signal(signal.SIGQUIT,self.term)
     
    697703                else:
    698704                    self.default_slow_check_clients = self.default_slow_check_clients * 2
    699 
     705        if args[0] == '-':
     706            if self.default_slow_check_clients > 0:
     707                self.default_slow_check_clients = self.default_slow_check_clients / 2
     708
     709    def append_event_log(self,*args,**kwargs):
     710        if DEBUG:
     711            if USE_FILE_EVENT_LOG:
     712                try:
     713                    fp = open(FILE_EVENT_LOG,'a')
     714                except:
     715                    fp = False
     716            else:
     717                fp = False
     718            separator=':'
     719            for x in args:
     720                the_time=str(int(time.time()))
     721                the_value=str(x)
     722                the_string=the_time+separator+the_value
     723                self.last_events.append(the_string)
     724                if fp:
     725                    fp.write('{}\n'.format(the_string))
     726            if fp:
     727                fp.close()
    700728
    701729    def schedule(self, *args, **kwargs):
    702730        if kwargs['event'] == 'NO_MORE_CLIENTS':
     731            self.append_event_log(kwargs['event'])
    703732            self.windowctl('-')
    704733            self.slowcheckctl('+')
    705734
    706735        if kwargs['event'] == 'HAVE_CLIENTS':
    707 
     736            self.append_event_log(kwargs['event'])
    708737            if kwargs['nclients'] == self.select_window:
    709738                self.windowctl('+')
     
    729758            # CPU SETTINGS
    730759            if not self.terminate and self.load > LIMIT:
     760                self.append_event_log('LOAD_LIMIT_REACHED')
    731761                self.paused = True
    732762            else:
     
    735765            # DB MEM SETTINGS
    736766            if self.max_heap and self.temporary_tables_size['sum']:
    737                 if self.temporary_tables_size['sum'] > self.max_heap * 0.4:
     767                if self.temporary_tables_size['sum'] > self.max_heap * 0.3:
     768                    self.append_event_log('MAX_HEAP_ALERT')
    738769                    self.windowctl('+')
     770                    self.slowcheckctl('-')
    739771                    if self.paused:
    740772                        #printea('Hitting max temporary table size unpausing','critical')
     
    742774            # SERVER MEM
    743775            if self.server_mem and self.server_mem < self.MIN_FREE_MEM_SERVER:
     776                self.append_event_log('SERVER_MEM_ALERT')
    744777                #printea('Hitting max memory from server collecting and reducing window','critical')
    745778                self.windowctl('-')
     
    755788
    756789            if self.USE_MAX_MEM and self.MEM_USED > self.MAX_MEM:
     790                self.append_event_log('MAX_MEM_ALERT')
    757791                self.windowctl('-')
    758792                self.slowcheckctl('+')
     
    760794            # QUEUES
    761795            if self.USE_MAX_QUEUES and self.sum_q_sizes() > self.MAX_QUEUE_UTILIZATION:
     796                self.append_event_log('MAX_QUEUES_REACHED')
    762797                self.windowctl('+')
    763798
     
    843878            self.cfg.store('db_clients_size',int(self.db_tables_size['clients']))
    844879            self.cfg.store('db_packages_size',int(self.db_tables_size['packages']))
     880            self.cfg.store('default_slow_check_clients',int(self.default_slow_check_clients))
     881            self.cfg.store('slow_check_clients',int(self.slow_check_clients))
    845882            if DEBUG:
     883                if USE_FILE_EVENT_DB:
     884                    max_event=len(self.last_events)
     885                    if max_event > 20:
     886                        max_event = 20
     887                    for i in range(0,max_event):
     888                        self.cfg.store('event{:02d}'.format(i),self.last_events[i])
     889                self.last_events=self.last_events[-20:]
    846890                if THREADED:
    847891                    printea("{} {}SelectSize={} ProcessingAt={} Mem={} Load={} Paused={} Tsize={} Trows={}".format(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()),out,self.select_window,int(suma_proc/10),int(self.MEM_USED),self.load,self.paused,self.temporary_tables_size['sum'],self.temporary_tables_rows['sum']),'info')
     
    939983
    940984    def write(self):
     985        values={}
     986        for x in self.get_internal_vars():
     987            values.setdefault(str(x)[:20],str(getattr(self,x))[:45])
    941988        if self._db:
    942             values={}
    943             for x in self.get_internal_vars():
    944                 values.setdefault(str(x),str(getattr(self,x)))
    945989            self._db.put_config(values=values)
     990        the_string="CONFIGURATION\n"
     991        if USE_CONFIG_FILE_LOG:
     992            fnbuild = lambda kv : str(kv[0])+'='+str(kv[1])+"\n"
     993            the_string+=reduce((lambda x,y: x+y) ,map(fnbuild,values.items()))
     994            try:
     995                with open(CONFIG_FILE_LOG,'w') as fp:
     996                    fp.write(the_string)
     997            except:
     998                pass
    946999
    9471000    def read(self):
Note: See TracChangeset for help on using the changeset viewer.