def add_task(self, task): ''' 创建测试任务 :param task: :return: ''' result = dict() if 'name' not in task or 'key' not in task or 'type' not in task or 'start_time' not in task or 'params' not in task: result['errno'] = -1 result['errstr'] = Error.params_fields_not_found() return result # 先检查任务是否存在 try: find_task = self.database.query(OrmTask).filter_by( name=task['name']).first() # key不同,说明不是子任务,属于重复添加 if find_task != None and find_task.key != task['key']: result['errno'] = -1 result['errstr'] = Error.task_exists() return result # key相同,说明是子任务,不需要再添加,返回成功 if find_task != None and find_task.key == task['key']: result['errno'] = 0 result['task_id'] = find_task.id result['errstr'] = Error.success() return result except Exception as err: print(err) result['errno'] = -1 result['errstr'] = str(err) return result # 任务不存在,添加 db_task = OrmTask() db_task.name = task['name'] db_task.key = task['key'] db_task.type = task['type'] db_task.start_time = task['start_time'] db_task.params = task['params'] try: self.database.add(db_task) self.database.commit() result['errno'] = 0 result['id'] = db_task.id result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def add_crash(self, node_id, crash): ''' 添加一条rabbitmq崩溃记录 :param crash: :return: ''' result = dict() if 'pid' not in crash or 'start_time' not in crash or 'crash_time' not in crash: result['errno'] = -1 result['errstr'] = Error.params_fields_not_found() return result crash_info = RmqCrash() crash_info.node_id = node_id crash_info.pid = crash['pid'] crash_info.start_time = crash['start_time'] crash_info.crash_time = crash['crash_time'] try: self.database.add(crash_info) self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() result['id'] = crash_info.id except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def get_machine_stats(self, node_id, time_from, time_to): ''' 获取节点物理服务器统计数据 :param node_id: :param time_from: :param time_to: :return: ''' result = dict() try: objs = self.database.query(MachineStat).filter(MachineStat.node_id == node_id) \ .filter(and_(MachineStat.stat_time >= time_from, MachineStat.stat_time < time_to)) \ .order_by(MachineStat.stat_time.asc()).all() ret = [] for obj in objs: ret.append(obj._asdict()) result['errno'] = 0 result['errstr'] = Error.success() result['result'] = ret except Exception as err: traceback.print_stack() result['errno'] = -1 result['errstr'] = str(err) finally: return result
def add_machine_stat(self, node_id, res): ''' 添加物理服务器统计记录 :param res: :return: ''' result = dict() if 'stat_time' not in res or 'cpu_usage' not in res or 'mem_usage' not in res or 'disk_free' not in res: result['errno'] = -1 result['errstr'] = Error.params_fields_not_found() return result try: stat = MachineStat() stat.node_id = node_id stat.stat_time = res['stat_time'] stat.cpu_usage = res['cpu_usage'] stat.mem_usage = res['mem_usage'] stat.mem_total = res['mem_total'] stat.disk_free = res['disk_free'] self.database.add(stat) self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() result['id'] = stat.id except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def add_rmq_res_stat(self, node_id, res): ''' 添加一条rabbitmq资源使用统计 :param res: :return: ''' result = dict() if 'stat_time' not in res or 'cpu_usage' not in res or 'mem_usage' not in res or 'disk_spend' not in res or 'msg_summary' not in res: result['errno'] = -1 result['errstr'] = Error.params_fields_not_found() return result try: stat = RmqStat() stat.node_id = node_id stat.stat_time = res['stat_time'] stat.cpu_usage = res['cpu_usage'] stat.mem_usage = res['mem_usage'] stat.disk_spend = res['disk_spend'] stat.net_speed = res['net_speed'] stat.msg_summary = json.dumps(res['msg_summary']) self.database.add(stat) self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() result['id'] = stat.id except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def clear_crashes(self, node_id): ''' 清空崩溃记录 :return: ''' result = dict() try: self.database.query(RmqCrash).filter(RmqCrash.node_id == node_id).delete() self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def delete_node(self, node_id): ''' 删除rabbitmq节点 :param node_id: :return: ''' result = dict() try: self.database.query(Node).filter(Node.id == node_id).delete() self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def delete_machine_stats(self, node_id): ''' 删除节点物理服务器统计数据 :param node_id: :return: ''' result = dict() try: self.database.query(MachineStat).filter(MachineStat.node_id == node_id).delete() self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def delete_task_seqs(self, task_id): ''' 删除任务统计序列 :param task_id: :return: ''' result = dict() try: self.database.query(TaskSeq).filter( TaskSeq.task_id == task_id).delete() self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def get_nodes(self): ''' 获取节点列表 :return: ''' result = dict() try: nodes = [] objs = self.database.query(Node).all() for obj in objs: nodes.append(obj._asdict()) result['errno'] = 0 result['errstr'] = Error.success() result['result'] = nodes except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def get_crashes(self, node_id): ''' 获取全部崩溃记录 :return: ''' result = dict() try: crashes = [] ret = self.database.query(RmqCrash).filter(RmqCrash.node_id == node_id).order_by(RmqCrash.crash_time.desc()).all() for item in ret: crashes.append(item._asdict()) result['errno'] = 0 result['errstr'] = Error.success() result['result'] = crashes except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def add_node(self, node_name): ''' 添加rabbitmq节点 :param node_name: :return: ''' result = dict() try: node = Node() node.name = node_name self.database.add(node) self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() result['id'] = node.id except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def get_node_name(self, node_id): ''' 获取节点名 :param node_id: :return: ''' result = dict() try: name = self.database.query(Node).filter(Node.id == node_id).first() if name == None: result['errno'] = -1 result['errstr'] = Error.data_not_in_db() else: result['errno'] = 0 result['errstr'] = Error.success() result['name'] = name.name except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def get_task_seqs(self, task_id): ''' 获取任务的全部指标统计序列 :param task_id: :return: ''' result = dict() try: seqs = self.database.query(TaskSeq).filter( TaskSeq.task_id == task_id).order_by( TaskSeq.stat_time.asc()).all() items = [] for seq in seqs: items.append(seq._asdict()) result['errno'] = 0 result['errstr'] = Error.success() result['result'] = items except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def get_tasks(self): ''' 获取测试任务列表 :return: ''' result = dict() try: tasks = self.database.query(OrmTask).order_by( OrmTask.start_time.desc()).all() task_list = [] for task in tasks: dict_task = task._asdict() task_list.append(dict_task) result['errno'] = 0 result['errstr'] = Error.success() result['result'] = task_list except Exception as err: print(err) result['errno'] = -1 result['errstr'] = str(err) finally: return result
def get_task(self, task_id): ''' 获取测试任务详情 :param task_id: :return: ''' result = dict() try: task = self.database.query(OrmTask).filter( OrmTask.id == task_id).first() if not task: self.set_status(404, Error.task_not_exists()) result['errno'] = -1 result['errstr'] = Error.task_not_exists() if task: result['errno'] = 0 result['errstr'] = Error.success() result['result'] = task._asdict() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) finally: return result
def add_task_seq(self, task_id, seq): ''' 添加任务指标统计序列 :param seq: :return: ''' result = dict() # 如果不存在统计时间,则参数错误 if seq['stat_time'] == None: result['errno'] = -1 result['errstr'] = Error.params_fields_not_found() return result # 生产者消费者在同一个进程情况 if 'sent' in seq and 'received' in seq: try: task_seq = TaskSeq() task_seq.task_id = task_id task_seq.stat_time = seq['stat_time'] task_seq.sent = seq['sent'] task_seq.received = seq['received'] task_seq.latency_min = seq['latency_min'] task_seq.latency_median = seq['latency_median'] task_seq.latency_75th = seq['latency_75th'] task_seq.latency_95th = seq['latency_95th'] task_seq.latency_99th = seq['latency_99th'] self.database.add(task_seq) self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) # 生产者消费者分离模式下的生产者 elif 'sent' in seq and 'received' not in seq: sql = 'insert into task_seq(task_id,stat_time,sent) values(%s,%d,%d) ON DUPLICATE KEY UPDATE sent=sent+%d' % \ (task_id, int(seq['stat_time']), seq['sent'], seq['sent']) try: self.database.execute(sql) self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) # 分离模式下的消费者上报数据 elif 'sent' not in seq and 'received' in seq: sql = 'insert into task_seq(task_id,stat_time,received,latency_min,latency_median,latency_75th,latency_95th,latency_99th) ' \ 'values(%s,%d,%d,%d,%d,%d,%d,%d) ON DUPLICATE KEY UPDATE received=received+%d,latency_min=%d,latency_median=%d,latency_75th=%d,' \ 'latency_95th=%d,latency_99th=%d'% \ (task_id, int(seq['stat_time']), seq['received'], seq['latency_min'], seq['latency_median'], seq['latency_75th'], seq['latency_95th'], seq['latency_99th'], \ seq['received'], seq['latency_min'], seq['latency_median'], seq['latency_75th'], seq['latency_95th'], seq['latency_99th']) try: self.database.execute(sql) self.database.commit() result['errno'] = 0 result['errstr'] = Error.success() except Exception as err: result['errno'] = -1 result['errstr'] = str(err) else: result['errno'] = -1 result['errstr'] = Error.params_fields_not_found() return result