def _execute(command): try: config = FileUtils.get_instance('config.ini') containerId = command["serverId"] c = docker.Client(base_url='unix://var/run/docker.sock', version=config.get_prop("docker-config", "api"), timeout=10) c.remove_container(container=containerId) time.sleep(5) log = "true" output = base64.encodestring(log) state = '1' param = [ "{\"id\":\"" + command["id"] + "\",\"state\":\"" + state + "\",\"mac\":\"" + MachineUtil.get_mac_address() + "\",\"msg\":\"" + output + "\",\"version\":\"" + command["version"] + "\"}" ] AosServerService.route_service("ThriftApiService", "editState", param) except Exception, ex: LogUtil.error(ex) log = ("Error {0}".format(str(ex))) output = base64.encodestring(log) state = '1' param = [ "{\"id\":\"" + command["id"] + "\",\"state\":\"" + state + "\",\"mac\":\"" + MachineUtil.get_mac_address() + "\",\"msg\":\"" + output + "\",\"version\":\"" + command["version"] + "\"}" ] AosServerService.route_service("ThriftApiService", "editState", param)
class NginxLifeTime(object): config = FileUtils.get_instance('config.ini') def _nginx_conf(self): mac = MachineUtil.get_mac_address() param = ["{\"mac\":\"" + mac + "\"}"] LogUtil.info("拉取Nginx配置信息:%s" % (json.dumps(param))) return AosServerService.route_service("ThriftApiService", "getNginxConf", param) def _do_action(self, server_response_command): LogUtil.info("执行指令:%s" % (server_response_command)) ApiUtil.execute_api("2111", server_response_command) def nginx_run(self): try: server_response = self._nginx_conf() if server_response is None: return server_responses = server_response.split("#EDIT#") if len(server_responses) < 1: return server_response_nginx = json.loads(server_responses[0]) self._do_action(server_response_nginx) except Exception, ex: LogUtil.error(ex)
class NodeLifeTime(object): config = FileUtils.get_instance('config.ini') api = config.get_prop("docker-config", "api") def _regist_node(self): mac = MachineUtil.get_mac_address() ip = NodeLifeTime.config.get_prop("aos-config", "client_ip") docker = NodeLifeTime.config.get_prop("docker-config", "docker") docker_status = "0" docker_images = "[]" docker_containers = "[]" if docker == "1": docker_status = DockerUtil._docker_status(NodeLifeTime.api) if docker_status == "2": docker_status = DockerUtil._docker_restart(mac, NodeLifeTime.api) if docker_status == "1": docker_images = base64.encodestring( DockerUtil._docker_images(NodeLifeTime.api)) docker_containers = base64.encodestring( DockerUtil._docker_containers()) param = [ "{\"mac\":\"" + mac + "\",\"ip\":\"" + ip + "\",\"dockerStatus\":\"" + docker_status + "\",\"dockerImages\":\"" + docker_images + "\",\"containers\":\"" + docker_containers + "\"}" ] LogUtil.info("注册节点信息:%s" % (json.dumps(param))) return AosServerService.route_service("ThriftApiService", "add", param) def _do_action(self, server_response_command): if len(server_response_command) == 0: return for action in server_response_command: LogUtil.info("执行指令:%s" % (json.dumps(action))) ApiUtil.execute_api(action["commandId"], action) def _do_config(self, server_response_config): if len(server_response_config) == 0: return for config in server_response_config: LogUtil.info("执行配置项:%s" % (json.dumps(config))) ApiUtil.execute_api(config["commandId"], config) def run(self): try: server_response = self._regist_node() if server_response is None: return server_responses = server_response.split("#ADDNODE#") if len(server_responses) < 2: return server_response_command = json.loads(server_responses[0]) server_response_config = json.loads(server_responses[1]) self._do_config(server_response_config) self._do_action(server_response_command) except Exception, ex: LogUtil.error(ex)
class LogMonitor(object): config = FileUtils.get_instance("config.ini") header = {"messageType": "log"} @staticmethod def send_log(log_info): try: flume_client = FlumeClient(LogMonitor.config.get_prop("flume-config", "server_ip"), int(LogMonitor.config.get_prop("flume-config", "server_port"))) event = ThriftFlumeEvent(LogMonitor.header, log_info) flume_client.send(event) except Exception, ex: print "%s" % ex.message finally:
class AosServerService(object): config = FileUtils.get_instance("config.ini") @staticmethod def route_service(service, method, param): try: aos_client = AosServer( AosServerService.config.get_prop("aos-config", "server_ip"), AosServerService.config.get_prop("aos-config", "server_port")) result = aos_client.route_service(service, method, json.dumps(param)) if result is None or result.model is None: return None LogUtil.in_out(service, method, param, result.model) return result.model except Exception, ex: LogUtil.error(ex) finally:
#!/usr/bin/env python # coding=utf-8 import sys, os sys.path.append(os.path.join(sys.path[0], '../../lib')) import json import time import base64 from util.mutil import FileUtils, MachineUtil, LogUtil from api.api_engine import ApiUtil, AosServerService config = FileUtils.get_instance('config.ini') class NodeLifeTime(object): def monitoring(self): while True: LogUtil.info("开始定时任务检测生命周期") ApiUtil.execute_api("6000",[]) LogUtil.info("结束定时任务检测生命周期") time.sleep(5) if __name__ == '__main__': node_lifetime = NodeLifeTime() node_lifetime.monitoring()
def _execute(command): config = FileUtils.get_instance('config.ini') nginx_conf_dir = config.get_prop("nginx-config", "nginx_conf_dir") nginx_conf_dir_bak = config.get_prop("nginx-config", "nginx_conf_dir_bak") os.system('mkdir -p ' + nginx_conf_dir) os.system('cp -r ' + nginx_conf_dir + nginx_conf_dir_bak) os.system('rm -rf ' + nginx_conf_dir + '*') state = '0' try: for k1 in command: upstreamName = k1["upstreamName"] upstreamNode = json.loads(k1["upstreamNode"]) fileName = nginx_conf_dir + upstreamName + '.conf' os.system('touch ' + fileName) c = nginx.Conf() LogUtil.info("Node信息:%s" % (upstreamNode)) t = '' for k2 in range(len(upstreamNode)): if (k2 == 0): t = 'server' + ' ' + upstreamNode[k2][ "ipAdress"] + ' ' + upstreamNode[k2]["strategy"] + ';\n' if (0 < k2 < len(upstreamNode) - 1): t = t + ' ' + 'server' + ' ' + upstreamNode[k2][ "ipAdress"] + ' ' + upstreamNode[k2]["strategy"] + ';\n' if (k2 == len(upstreamNode) - 1): t = t + ' ' + 'server' + ' ' + upstreamNode[k2][ "ipAdress"] + ' ' + upstreamNode[k2]["strategy"] ipHash = k1["ipHash"] if (ipHash == '1'): u = nginx.Upstream(upstreamName, nginx.Key('', t), nginx.Key('', 'ip_hash')) c.add(u) if (ipHash == '0'): u = nginx.Upstream(upstreamName, nginx.Key('', t)) c.add(u) s = nginx.Server() s.add( nginx.Key('listen', k1["nginxListenPort"]), nginx.Key('server_name', k1["nginxServerName"]), nginx.Key('access_log', k1["accessLog"]), nginx.Location( '= /', nginx.Key('proxy_pass', 'http://' + k1["upstreamName"]), nginx.Key('proxy_redirect', 'off'), nginx.Key('proxy_set_header', 'Host $host'), nginx.Key('proxy_set_header', 'X-Real-IP $remote_addr'), nginx.Key('proxy_set_header', 'X-Forwarded-For $proxy_add_x_forwarded_for'))) c.add(s) nginx.dumpf(c, fileName) LogUtil.info("完成Nginx配置") output = os.popen('service nginx restart').read() state = '1' param = [ "{\"mac\":\"" + MachineUtil.get_mac_address() + "\",\"state\":\"" + state + "\",\"msg\":\"" + output + "\"}" ] os.system('rm -rf ' + nginx_conf_dir_bak) AosServerService.route_service("ThriftApiService", "nginxLog", param) except Exception, ex: LogUtil.error(ex) os.system('rm -rf ' + nginx_conf_dir) os.system('mv ' + nginx_conf_dir_bak + nginx_conf_dir) os.system('service nginx restart') output = ex.message state = '2' param = [ "{\"mac\":\"" + MachineUtil.get_mac_address() + "\",\"state\":\"" + state + "\",\"msg\":\"" + output + "\"}" ] AosServerService.route_service("ThriftApiService", "nginxLog", param)
#!/usr/bin/env python # coding=utf-8 from util.mutil import FileUtils main_fonf = FileUtils.get_instance('config.ini') import os import urllib, urllib2 import smtplib import datetime import threading import time from email.mime.text import MIMEText from twill.commands import * from util.mutil import LogUtil class TwillMonitor(threading.Thread): def run(self): try: server_name = main_fonf.get_prop("server", "name") target_urls = main_fonf.get_prop("monitor", "urls") target_hosts = main_fonf.get_prop("monitor", "hosts") html_info = self.monitor_urls(target_urls) html_info += self.monitor_hosts(target_hosts) if html_info.strip() != '': mail_head = '<table border="0" cellspacing="0" cellpadding="0" ' \ 'style="font-family:"微软雅黑",Helvetica,Arial,sans-serif;font-size:14px " width="100%"> \ <tbody> \ <tr> \