示例#1
0
 def __init__(self, ip, port):
     #本机IP
     self.ip = ip
     #本机端口
     self.port = port
     #self.hosts = serialize.all_host_configs()
     self.redis = RedisHelper()
示例#2
0
class MonitorClient(object):
    def __init__(self,server,port):
        self.server = server#服务器端ip
        self.port = port#端口
        self.configs = {}#获取配置信息
        self.redis = RedisHelper()
    
    #将传过来的数据序列化
    def format_msg(self,key,value):
        msg = {key,value}
        return pickle.dumps(msg)
        
    def get_configs(self):
        config = self.redis.get('HostConfig::%s'%host_ip)
        if config:
            self.configs = pickle.loads(config)
            return True
        
    def handle(self):
        if self.get_configs():
            print '---going to monitor services---',self.configs
            
            while True:
                for service_name, val in self.configs['servcies'].item():
                    interval,plugin_name,last_check = val
                    if time.time() - last_check >= interval:
                    #need to kick off the next run
                        #启动一个线程,这个线程完成对相关信息的监控并返回给服务器的任务
                        t = threading.Thread(target=self.task,args=[service_name,plugin_name])
                        t.start()
                        self.configs['services'][service_name][2] = time.time() #update last check time
                    else:
                        next_run_time = interval - (time.time() - last_check)
                        
                        print '\033[32;1m%s\033[0m will be run in next \033[32;1m%s\033[0m seconds'%(service_name,next_run_time)
                #将所有的服务循环完一遍后,停1s
                time.sleep(1)            
        else:
            print '---could not found any configurations for this hosts---'
    
    #修改该方法,使其负责完成监控,收集客户端信息然后发到服务器端的任务
    def task(self,servcie_name,plugin_name):
        print '---going to run service:',servcie_name,plugin_name
        #通过反射的方式从plugin_api中,取出获取的同名字符串插件方法。
        func = getattr(plugin_api, plugin_name)
        result = func() # 然后执行方法
        #方法得到的结果为字典类型,所以需要序列化然后存到redis中
        #self.redis.public(pickle.dumps(result))
        msg = self.format_msg('report_service_data',
                              {'ip':host_ip,
                               'service_name':servcie_name,
                               'data':result,
                               }
                              )
        #上面的‘report_service_data’告诉服务端这发送的是监控信息,这样做的好处是细化了功能,
        #上面的一系列操作不仅可以用来监控数据,还可以做例如传文件的功能,所以为以后扩展功能预留空间。
        self.redis.public(msg)
        
    def run(self):
        self.handle()
示例#3
0
 def test_decr(self):
     RedisHelper.redis_flushdb()
     # create a counter and decrease value
     params = {'prefix': "test", 'ttl': 120}
     zcount = RedisZSetCounter(self.redis_server, params)
     tmp = zcount.decr('test_id', 'a', 1.0)
     # now check that the value in redis is right
     key = zcount.get_key('test_id')
     val = RedisHelper.get_connection().zscore(key, 'a')
     self.assertEqual(tmp, val, "wrong value for counter")
示例#4
0
class MonitorClient(object):
    def __init__(self, server, port):
        self.server = server
        self.port = port
        self.configs = {}
        self.redis = RedisHelper()  #建立redis链接

    def format_msg(self, key, value):  #专门用来处理数据
        msg = {key: value}
        return pickle.dumps(msg)

    def get_configs(self):
        config = self.redis.get('HostConfig::%s' % self.server)
        if config:  #redis里存在此key
            self.configs = pickle.loads(config)
            return True

    def handle(self):
        if self.get_configs():
            print "--- going to monitor services ---", self.configs
            #开始监控
            while True:
                for service_name, val in self.configs['services'].items():
                    #print service_name,val
                    interval, plugin_name, last_check = val
                    if time.time() - last_check >= interval:  #代表超时,需要启一个新线程运行了
                        t = threading.Thread(target=self.task,
                                             args=[service_name, plugin_name])
                        t.start()
                        self.configs['services'][service_name][2] = time.time(
                        )  #更新时间戳
                    else:
                        next_run_time = interval + last_check - time.time()
                        print "%s will be run in next %s seconds" % (
                            service_name, next_run_time)
                time.sleep(2)
        else:
            print "--- could not found any configurations for this host ---"

    def task(self, service_name, plugin_name):
        print "---going to run service:", service_name, plugin_name
        func = getattr(plugin_api, plugin_name)
        result = func()  #执行插件
        #把执行结果发给redis
        #self.redis.publish(pickle.dumps(result))
        msg = self.format_msg('report_service_data', {
            'ip': host_ip,
            'service_name': service_name,
            'data': result
        })
        self.redis.public(msg)

    def run(self):
        self.handle()
示例#5
0
文件: client.py 项目: jameyang/python
class MonitorClient(object):
    def __init__(self, service, port):
        self.server = service
        self.port = port
        self.configs = {}
        self.redis = RedisHelper()

    @staticmethod
    def format_msg(key, value):
        msg = {key: value}
        return pickle.dumps(msg)

    def get_configs(self):
        config = self.redis.get('HostConfig::%s' % host_ip)
        if config:
            self.configs = pickle.loads(config)   # 将config序列化后赋值给全局变量
            return True

    def handle(self):
        if self.get_configs():
            print 'Going to monitor services ', self.configs
            while True:
                for service_name, val in self.configs['services'].items():
                    interval, plugin_name, last_check = val   # server.core.serialize.py传入的三个参数
                    if time.time() - last_check >= interval:   # need to kick off the next run
                        t = threading.Thread(target=self.task, args=[service_name, plugin_name])
                        t.start()
                        self.configs['services'][service_name][2] = time.time()   # update last check time
                    else:
                        next_run_time = interval - (time.time() - last_check)   # 下一次运行时间
                        print '\033[32;1m%s\033[0m will be run in next time \033[32;1m%s\033[0m seconds' \
                              % (service_name, next_run_time)
                time.sleep(1)
        else:
            print 'Could not found any configurations for this host.'

    def task(self, service_name, plugin_name):
        print 'Going to run service:', service_name, plugin_name
        func = getattr(plugin_api, plugin_name)   # 通过反射导入plugins.plugin_api里面的监控方法
        result = func()
        # self.redis.public(pickle.dumps(result))
        msg = self.format_msg(
            'report_service_data',
            {
                'ip': host_ip,
                'service_name': service_name,
                'data': result,
            }
        )
        self.redis.public(msg)

    def run(self):
        self.handle()
示例#6
0
def flush_all_host_configs_into_redis():
    applied_hosts = []
    for group in hosts.monitored_groups:
        applied_hosts.extend(group.hosts)
    applied_hosts = set(applied_hosts)

    redishelper = RedisHelper()
    for host in applied_hosts:
        host_config = host_config_serialize(host)
        key = 'HostConfig::%s' % host
        redishelper.set(key,pickle.dump(host_config))
    return True
示例#7
0
def flush_all_host_configs_into_redis():  #把所有配置刷到redis
    applied_hosts = []
    redis = RedisHelper()
    for group in monitored_groups:
        applied_hosts.extend(group.hosts)
    applied_hosts = set(applied_hosts)

    for host_ip in applied_hosts:
        host_config = host_config_serializer(host_ip)
        # 序列化字典后存入redis
        key = 'HostConfig::%s' % host_ip
        redis.set(key, pickle.dumps(host_config))
示例#8
0
def flush_all_host_configs_into_redis():
    applied_hosts = []
    redis = RedisHelper()
    for group in hosts.monitored_groups:
        applied_hosts.extend(group.hosts)
    applied_hosts = set(applied_hosts)

    for host_ip in applied_hosts:
        host_config = host_config_serializer(host_ip)
        key = 'HostConfig::%s' % host_ip
        redis.set(key, pickle.dumps(host_config))
    return True
示例#9
0
 def test_last_n(self):
     RedisHelper.redis_flushdb()
     params = {'prefix': "test", 'ttl': 120}
     zcount = RedisZSetCounter(self.redis_server, params)
     zcount.incr('test_id', 'c', 6)
     zcount.incr('test_id', 'b', 3)
     zcount.incr('test_id', 'a', 1)
     zcount.incr('test_id', 'd', 2)
     last3 = zcount.last_n('test_id', 3)
     print last3
     self.assertEqual(last3[0][0], 'a', "wrong ranking 1st position should be 'c'")
     self.assertEqual(last3[1][0], 'd', "wrong ranking 2nd position should be 'b'")
     self.assertEqual(last3[2][0], 'b', "wrong ranking 3rd position should be 'c'")
示例#10
0
def flush_all_host_configs_into_redis():
    applied_hosts = []
    redis = RedisHelper()
    for group in hosts.monitored_groups:
        applied_hosts.extend(group.hosts)
    applied_hosts = set(applied_hosts)
    
    for host_ip in applied_hosts:
        host_config = host_config_serialize(host_ip)
        #redis中只存字符串和数字,并不认识python的字典,所以需要序列化(序列化后就变成字符串了),因为这个程序都是用python写的,而且pickle可以序列化的数据类型比较多
        key = 'HostConfig::%s' %host_ip #给这个key加一个标识,这样以后添加其他信息时方便区分识别
        redis.set(key,pickle.dumps(host_config))
    return True
示例#11
0
def flush_all_host_configs_into_redis():
    applied_hosts = []
    redis = RedisHelper()

    for group in hosts.monitored_groups:
        applied_hosts.extend(group.hosts)
    applied_hosts = set(applied_hosts)

    for host_ip in applied_hosts:
        host_config = host_config_serializer(host_ip)
        key = 'HostConfig::%s' % host_ip
        redis.set(key, pickle.dumps(host_config))
        print host_config
    return True
示例#12
0
class MonitorServer(object):
    def __init__(self,ip,port):
        self.ip = ip
        self.port = port
        self.hosts = serialize.all_host_configs()
        self.redis = RedisHelper()
        
    def handle(self):
        redis_sub = self.redis.subscribe()
        #redis_sub.parse_response()
        while True:
            msg = redis_sub.parse_response()
            print 'recv:',msg
            action_process.action_process(self,msg)#把self传过去的好处是,在另一个模块中也可以调用这个模块中已经生成的实例,而不需要再重新实例化出一个新的实例,相当于把实例传过去
            print '---waiting for new msg---'
            
            for host,val in self.hosts['hosts'].items():
                print host,val
                
    def run(self):
        print '---starting monitor server---'
        self.handle()
        
    def process(self):
        pass
示例#13
0
class MonitorServer(object):
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
        self.hosts = serialize.flush_all_host_configs_into_redis()
        self.redis = RedisHelper()

    def handle(self):
        redis_sub = self.redis.subscribe()
        #redis_sub.parse_response()
        while True:
            msg = redis_sub.parse_response()
            print 'recv:', msg
            action_process.action_process(self, msg)
            print '----waiting for new msg----'

            # received data
            for host, val in self.hosts['HostConfig'].items():
                print host, val

    def run(self):
        print '----starting monitor server----'
        self.handle()

    def process(self):
        pass
示例#14
0
class MonitorServer(object):
    def __init__(self, ip, port):
        #本机IP
        self.ip = ip
        #本机端口
        self.port = port
        #self.hosts = serialize.all_host_configs()
        self.redis = RedisHelper()

    def handle(self):
        redis_sub = self.redis.subscribe()
        #redis_sub.parse_response()
        while True:
            msg = redis_sub.parse_response()
            #收到消息就打印,没有就堵塞
            print('recv:', msg)
            #收到丢给action_process
            action_process.action_process(self, msg)
            print('-----waiting for new msg------')

            for host, val in self.hosts['hosts'].items():
                print(host, val)

    def run(self):
        print('--------starting monitor server -------')
        self.handle()

    def process(self):
        pass
示例#15
0
class MonitorServer(object):
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
        self.hosts = serialize.all_host_configs()
        self.redis = RedisHelper()

    def handle(self):
        redis_sub = self.redis.subscribe()
        redis_sub.parse_response()
        while True:
            msg = redis_sub.parse_response()
            # print('recv:', msg)
            action_process.action_process(self, msg)  # 传入 self 实例本身, 和订阅的数据
            print('----waiting for new msg ---')

            # received data
            for host, val in self.hosts['hosts'].items():
                print(host, val)

    def run(self):
        print('----starting monitor server----')
        self.handle()

    def process(self):
        pass
示例#16
0
    def get_redis(self):
        """
        Get redis connection, lazy loading
        :return: redis object
        """
        if self.redis is None:
            self.redis = RedisHelper.get_connection()

        return self.redis
示例#17
0
class MonitorClient(object):
    def __init__(self,server,port):
        self.server = server
        self.port = port
        self.configs = {}
        self.redis = RedisHelper()

    def get_configs(self):
        value = self.redis.get('HostConfig::%s' % host_ip)
        if value:
            self.configs =pickle.load(value)
            return True
        return False

    def handle(self):
        if self.get_configs():
            print '--going to monitor services-- ',self.configs
            while True:
                for service_name,val in self.configs['services'].items():
                    interval,plugin_name,last_check = val
                    if time.time() - last_check >= interval:
                        t = threading.Thread(target=self.task,args=[service_name,plugin_name])
                        t.start()
                        self.configs['serivces'][service_name][2] = time.time()
                    else:
                        next_run_time = interval - (time.time()-last_check)
                        print '%s will be run in next %s seconds' % (service_name,next_run_time)
                time.sleep(1)

        else:
            print '--could not found any configuration for this host---'

    def task(self,service_name,plugin_name):
        print '---going to run service:',service_name
        func = getattr(plugin_api,plugin_name)
        result = func()
        self.redis.public(pickle.dump(result))

    def run(self):

        self.handle()
示例#18
0
文件: main.py 项目: Tim-luo/Notes
class MonitorServer(object): #创建主的类,调用连接Redis&调用serialize序列化,把监控模板上传至Redis
    def __init__(self):
        self.r = RedisHelper()
        self.save_configs()
        self.sub = self.r.subscribe()

    def start(self):
        self.monitor_data_processing()
        while True:
            client_data = json.loads(self.sub.parse_response()[2])
            client_data['last_update'] = time.time()
            #print client_data
            business_type = client_data.keys()[0]
            action_process.action_process(self,business_type,client_data)
            '''
            self.r.set('ServiceData::%s:%s' % (client_data['report_monitor_data']['ip_address'],
                                               client_data['report_monitor_data']['service_name']),
                                               client_data)
                                               '''
            #数据存入到Redis中并且存储的相同数据只保留一条,数据不断刷新
    def monitor_data_processing(self): #启用多进程处理任务
        p = multiprocessing.Process(target=self.monitor_data_handling,)
        p.daemon = True #设置为dameon模式,主进程挂掉之后,关闭进程
        p.start()

    def monitor_data_handling(self):#所有的数据逻辑处理方法
        print '''---starting a new process to deal with monitor data ---'''
        while True:
            client_data = self.r.keys("ServiceData::*")
            for i in client_data:
                host_ip,host_server = i.split('::')[1].split(':')
                action_process.action_work(self,i,host_server)
                self.r.del_key(i)
                print i,'is work done'

    def save_configs(self):
        serialize.push_config_toredis(self,hosts.monitored_groups)#这里把self传过去,在push_config_toredis中即可调用实例
示例#19
0
    def on_click(self):
        input_value = self.textbox.text()
        # print(type(input_value))
        if self.pattern.match(input_value):

            textboxValue = input_value
            print(textboxValue)
            #发布到redis
            obj = RedisHelper()
            for i in range(1, 8):
                obj.publish({
                    "type": "add_sn",
                    "sn": textboxValue,
                    "complete": 1,
                    "station": 'ST' + str(i) + '0'
                })  #发布

            rd = obj.get_redis()
            while True:
                now_time = int(time.time())
                if rd.sadd("option_sets", now_time):
                    rd.hset(
                        "option_hashes", now_time,
                        '{"method": "write_complete", "params": "%s"}' %
                        "ST10")
                    rd.publish("START", now_time)
                    print('station_name complete')
                    break

            #结果存到label中
            self.lb1.setText(textboxValue)
            self.lb1.adjustSize()
            """打印完毕之后清空文本框"""
            self.textbox.setText('')
        else:
            self.textbox.setText('')
            print("序列号位数不对")
示例#20
0
class sucker(object):
    def __init__(self):
        self.hosts = serialize.all_host_configs()
        self.redis = RedisHelper()
    
    def handle(self):
        for host_ip,v in self.hosts['hosts'].items():
            self.hosts['hosts'][host_ip]['configs'] =  serialize.config_serializer(host_ip, detail=True)
            print host_ip,v
            print 'status data:',self.pull_host_data(host_ip)
    def pull_host_data(self,ip):
        key = 'StatusData::%s' % ip 
        data =self.redis.get(key)
        if data:
            return pickle.loads(data)
示例#21
0
class sucker(object):
    def __init__(self):
        self.hosts = serialize.all_host_configs()
        self.redis = RedisHelper()
    
    def handle(self):
        for host_ip,v in self.hosts['hosts'].items():
            self.hosts['hosts'][host_ip]['configs'] =  serialize.config_serializer(host_ip,detail=True)
            print(host_ip,v)
            print('status data:',self.pull_host_data(host_ip))
    def pull_host_data(self,ip):
        key = 'StatusData::%s' % ip 
        data =self.redis.get(key)
        if data:
            return pickle.loads(data)
示例#22
0
def init_all_host_configs_into_client():
    applied_hosts = []
    redis = RedisHelper()
    for group in hosts.monitored_groups:
        applied_hosts.extend(group.hosts)
    applied_hosts = set(applied_hosts)

    configs = {'configs': {}}
    for host_ip in applied_hosts:
        host_config = host_config_serializer(host_ip)
        key = 'HostConfig::%s' % host_ip

        configs['configs'][key] = pickle.dumps(host_config)

    return configs
示例#23
0
class MonitorServer(object):
    def __init__(self,ip,port):
        self.ip = ip
        self.port = port
        self.hosts = serialize.host_config_serialize()
        self.redis = RedisHelper()

    def handle(self):
        redis_sub = self.redis.subscribe()
        while True:
            msg = redis_sub.parse_response()
            print 'recv:',msg
            action_process.action_process(self,msg)
            print '---waiting for new msg ---'
            for host,val in self.hosts['hosts'].items():
                print host,val


    def run(self):
        self.handle()

    def process(self):
        pass
示例#24
0
#!/usr/bin/env python
# -*- coding:utf-8 -*-
''''订阅方'''
import sys

reload(sys)

sys.setdefaultencoding('utf-8')
from redishelper import RedisHelper

obj = RedisHelper()
redis_sub = obj.subscribe(channel='liyanliang')

while True:
    msg = redis_sub.parse_response()
    print('接收:'.decode(), msg)
示例#25
0
 def __init__(self):
     self.hosts = serialize.all_host_configs()
     self.redis = RedisHelper()
示例#26
0
 def __init__(self):
     self.hosts = serialize.all_host_configs()
     self.redis = RedisHelper()
示例#27
0
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "Sigai"

from redishelper import RedisHelper
import time

publisher = RedisHelper()
result = publisher.publish(time.ctime())
print(result)
示例#28
0
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
发布者
'''
import sys
reload(sys)

sys.setdefaultencoding('utf-8')
from redishelper import RedisHelper

obj = RedisHelper()
#订阅了100次
n = 1
while True:
    if n <= 100:
        obj.public(chanel='liyanliang', msg='no usr  moren')
    else:
        obj.unsubscribe(chanel='liyanliang')
        print('取消订阅')
        break
    n += 1
示例#29
0
 def __init__(self,server,port):
     self.server = server#服务器端ip
     self.port = port#端口
     self.configs = {}#获取配置信息
     self.redis = RedisHelper()
示例#30
0
#! /usr/bin/env python
# coding:utf-8

"""
在redis设置一个key,然后去获取他得值
"""

from redishelper import RedisHelper

r = RedisHelper()
# 设置key
r.set('name','wweeee2222')

# 获取key
print(r.get('name'))
示例#31
0
 def __init__(self, ip, port):
     self.ip = ip
     self.port = port
     self.hosts = serialize.all_host_configs()
     self.redis = RedisHelper()
示例#32
0
 def __init__(self, ip, port):
     self.ip = ip
     self.port = port
     self.hosts = serialize.flush_all_host_configs_into_redis()
     self.redis = RedisHelper()
示例#33
0
 def __init__(self,ip,port):
     self.ip = ip
     self.port = port
     self.hosts = serialize.host_config_serialize()
     self.redis = RedisHelper()
示例#34
0
__author__ = "那位先生Beer"
from redishelper import RedisHelper

obj = RedisHelper()
redis_sub = obj.subscribe()

while True:  #不停地接收消息
    msg = redis_sub.parse_response()  #这才是真正的接收消息
    print(msg)
示例#35
0
class MonitorClient(object):
    def __init__(self, server, port):
        self.server = server
        self.port = port
        self.configs = {}
        self.lock = threading.Lock()
        self.redis = RedisHelper()

    def format_msg(self, key, value):
        """
        将 message 序列化
        :param key:
        :param value:
        :return:
        """
        msg = {key: value}
        return pickle.dumps(msg)

    def get_configs(self):
        """
        向 server 发送 client ip 获取 监控指标
        :return:
        """
        msg = self.format_msg('get_host_configs', {'ip': client_ip})

        print('-----get host monitor configs----')  # ,msg
        redis_pub = self.redis.public(msg)

        count = 1
        while count < 30:  # 重复30 次, 从 redis 中获取 client 的监控指标数据
            configs = self.redis.get(client_ip)
            if configs:
                # print configs
                return pickle.loads(configs)
            else:
                count += 1
                time.sleep(1)
        sys.exit('Error:could not get client monitor configurations!')

    def handle(self):
        """
        循环处理
        :return:
        """
        self.configs = self.get_configs()
        if self.configs['services']:
            print('--going to monitor ---', self.configs)
            # {'services': {'linux_memory': [30, 'get_memory_info', 0], 'linux_cpu': [30, 'get_cpu_status', 0]}}
            while True:  # 依据监控指标进行循环执行脚本
                for service_name, val in self.configs['services'].items():
                    interval, plugin_name, last_check = val
                    next_run_time = interval - (time.time() - last_check)
                    if time.time() - last_check >= interval:
                        print(
                            'service\033[32;1m%s\033[0m has reached monitor interval'
                            % service_name)
                        t = threading.Thread(target=self.task_run,
                                             args=[
                                                 service_name,
                                                 plugin_name,
                                             ])
                        t.start()
                        self.configs['services'][service_name][2] = time.time()
                    else:
                        print(
                            'service\033[34;1m%s\033[0m next run time is \033[34;1m%s\033[0m seconds later'
                            % (service_name, next_run_time))
                        time.sleep(1)
                        # print self.configs
        else:
            print('---nothing to monitor,configs dict is empty---')

    def task_run(self, service_name, plugin_name):
        """
        执行监控脚本, 向 redis 发布数据
        :param service_name:
        :param plugin_name:
        :return:
        """
        plugin_func = getattr(plugin_api, plugin_name)
        result = plugin_func()
        msg = self.format_msg('report_service_data', {
            'ip': client_ip,
            'service_name': service_name,
            'data': result,
        })
        self.redis.public(msg)

    def run(self):
        self.handle()
示例#36
0
class MonitorClient(object):
    def __init__(self,server,port):
        self.server = server
        self.port = port 
        self.configs = {}
        self.lock = threading.Lock()
        self.redis = RedisHelper()

    def format_msg(self,key,value):
        msg = {key: value}
        return pickle.dumps(msg)

    def get_configs(self):
        msg = self.format_msg('get_host_configs', {'ip': client_ip})
        
        print u'-----get host monitor configs----' #,msg
        redis_pub = self.redis.public(msg)
        
        count = 1 
        while count<30:
            configs = self.redis.get(client_ip)
            if configs:
               #print configs 
               return pickle.loads(configs) 
            else:
                count +=1
                time.sleep(1)
        sys.exit('Error:could not get client monitor configurations!')

    def handle(self):
        self.configs = self.get_configs() 
        if self.configs['services']: 
            print '--going to monitor ---',self.configs
            #{'services': {'linux_memory': [30, 'get_memory_info', 0], 'linux_cpu': [30, 'get_cpu_status', 0]}}
            while True:
                for service_name,val in self.configs['services'].items():
                    interval,plugin_name,last_check = val 
                    next_run_time = interval - (time.time() - last_check)
                    if time.time() - last_check >= interval:
                        print 'service\033[32;1m%s\033[0m has reached monitor interval' % service_name 
                        t = threading.Thread(target=self.task_run,args=[service_name,plugin_name,])
                        t.start()
                        self.configs['services'][service_name][2] = time.time()
                    else:
                        print 'service\033[34;1m%s\033[0m next run time is \033[34;1m%s\033[0m seconds later' % (service_name,next_run_time)
                        time.sleep(1)
                #print self.configs    
        else:
            print '---nothing to monitor,configs dict is empty---'

    def task_run(self,service_name,plugin_name):
        plugin_func = getattr(plugin_api, plugin_name)
        result = plugin_func()
        msg = self.format_msg('report_service_data', 
                                {'ip': client_ip,
                                 'service_name':service_name,
                                 'data': result,
                                                })
        self.redis.public(msg)

    def run(self):
        self.handle()
示例#37
0
from redishelper import RedisHelper

obj = RedisHelper()

obj.public('hello')
obj.public('how old are you')
示例#38
0
 def __init__(self, server, port):
     self.server = server
     self.port = port
     self.configs = {}
     self.redis = RedisHelper()  #建立redis链接
示例#39
0
 def __init__(self,server,port):
     self.server = server
     self.port = port 
     self.configs = {}
     self.lock = threading.Lock()
     self.redis = RedisHelper()
示例#40
0
 def __init__(self, server, port):
     self.server = server
     self.port = port
     self.configs = {}
     self.lock = threading.Lock()
     self.redis = RedisHelper()
示例#41
0
文件: main.py 项目: Tim-luo/Notes
 def __init__(self):
     self.r = RedisHelper()
     self.save_configs()
     self.sub = self.r.subscribe()
示例#42
0
class MonitorServer(object):
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
        self.hosts = serialize.all_host_configs()
        self.redis = RedisHelper()

    def get_config(self, host):
        applied_services = []
        config_list = {host: {}}
        for group in monitored_groups:
            if host in group.hosts:
                applied_services.extend(
                    group.services)  #后面追加列表,group.services是一台主机所有配置的服务
        applied_services = set(applied_services)  #去重,列表转集合去掉重复项
        for service in applied_services:
            service = service()  #把类实例化
            config_list[host][service.name] = service.triggers
        #print config_list
        return config_list[host]

    def handle(self):
        redis_sub = self.redis.subscribe()

        value_dic = {}
        for host in self.hosts['hosts'].keys():
            value_dic[host] = {
                'MemUsage': [],
                'iowait': [],
                'idle': [],
                'load1': []
            }  #用来存数据
        print value_dic

        while True:
            msg = redis_sub.parse_response()
            #print 'recv:',msg
            action_process.action_process(
                self,
                msg)  #self是将本实例传给action_process方法,action_process不再需要导入redis
            print '----waiting for new msg ---'

            #received data
            for host, val in self.hosts['hosts'].items():
                if val is not None:
                    #print host, val
                    #get config
                    configs = self.get_config(host)

                    for service_name, val2 in val.items():
                        print "hahaha", configs[service_name]
                        c_time_stamp = val2['time_stamp']
                        data = val2['data']
                        #print "dadada",data

                        time_pass_since_last_recv = time.time() - c_time_stamp
                        #print  "Time pass:"******"\033[41;1m Service %s has no data for %ss\033[0m" % (
                                service_name, time_pass_since_last_recv)
                        else:

                            if 'MemUsage' in data.keys():
                                key = 'MemUsage'
                                key_value = int(data['MemUsage']) * 100 / int(
                                    data['MemTotal'])
                                print key, ": ", key_value
                                value_dic[host][key].append(float(key_value))
                            else:
                                for key in configs[service_name].keys():
                                    key_value = data[key]
                                    print key, ": ", key_value
                                    value_dic[host][key].append(
                                        float(key_value))
                        for key in configs[service_name].keys():
                            if len(value_dic[host][key]) > 5:  #只保留5个数,测试用
                                del value_dic[host][key][0]
                                configs[service_name][key]['func'](
                                    configs[service_name][key]['warning'],
                                    configs[service_name][key]['operator'],
                                    value_dic[host][key][-6:-1])
                            #times = int(configs[service_name][key]['minutes'])*60/
                            print value_dic

    def run(self):
        print '----starting monitor server----'
        self.handle()

    def process(self):
        pass
示例#43
0
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "Sigai"

from redishelper import RedisHelper

subscriber = RedisHelper()

sub = subscriber.subscribe()

while True:
    msg = sub.parse_response()
    print(msg)
示例#44
0
__author__ = "那位先生Beer"
from redishelper import RedisHelper
#在指令环境下 public 频道  “消息”
obj = RedisHelper()
obj.public( 'hello' )
示例#45
0
 def __init__(self, server, config):
     RedisHelper.set_server(server)
     self.redis = None
     CounterBase.__init__(self, config['prefix'], config['ttl'])
示例#46
0
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# author: xiatian

from redishelper import RedisHelper

obj = RedisHelper()
obj.public('i am xiatian!')
示例#47
0
#! /usr/bin/env python
# coding:utf-8

"""
redis 订阅端
"""

from redishelper import RedisHelper
import time

r=RedisHelper()
recv = r.subscribe()
while True:
    print(r.subscribe())
示例#48
0
__author__ = 'qgw'
from redishelper import RedisHelper

obj = RedisHelper()
obj.public('how are you')
# obj.public('你怎么样')
示例#49
0
文件: client.py 项目: jameyang/python
 def __init__(self, service, port):
     self.server = service
     self.port = port
     self.configs = {}
     self.redis = RedisHelper()