`
shixiaomu
  • 浏览: 383876 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自动化运维系统雏形

 
阅读更多
java+python+robbitMQ+subprocess+threading
典型的客户端+mq+服务端架构...

import pika
import subprocess
import time
import traceback
import threading
import datetime
import signal
import os
import string
class ThreadClass(threading.Thread):
    def __init__(self, body, rpid, timeout=10):
            threading.Thread.__init__(self)
            self.body = body
            self.channel = mqConUtil().channel
            self.rpid = rpid
            self.timeout = int(timeout)
           
    def send_signal(self, sig):
            """Send a signal to the process
            """
            os.kill(self.pid, sig)
        
    def terminate(self):
        """Terminate the process with SIGTERM
        """
        self.send_signal(signal.SIGTERM)
       
    def kill(self):
        """Kill the process with SIGKILL
        """
        self.send_signal(signal.SIGKILL)
   
    def wait(self):
        """ wait child exit signal,
        """
        self.Popen.wait()

    def free_child(self):
        """
        kill process by pid
        """
        try:
            self.Popen.terminate()
            self.Popen.kill()
            self.terminate()
            self.kill()
            self.wait()
        except:
            pass
           
    def run(self):
        start = time.time()
        self.start_time = start
        now = datetime.datetime.now()
        ftime2 = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
        print "%s says Hello World at time: %s" % (self.getName(), now)
        start = time.time()
        status = -11
        output = "defOutputERROR"
        pid = 0
        try:
            self.Popen = subprocess.Popen(split_cmd(self.body), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
            self.pid = self.Popen.pid
            while self.Popen.poll() == None and (time.time() - self.start_time) < self.timeout :
                time.sleep(1)
            #p.wait()
            if self.Popen.poll() == None: # child is not exit yet!
                self.free_child() 
                self.returncode = -9999
                status = self.returncode
            else:
                self.returncode = self.Popen.poll()
                output = self.Popen.stdout.read()
                output += self.Popen.stderr.read()
                status = self.Popen.poll()
                pid = self.pid
        except Exception, e:
            print(e)
            print(traceback.format_exc())
        print(self.rpid, pid, str(time.time() - start), now, output, status, self.body)
        self.channel.basic_publish(exchange='', routing_key='hello2', body=str(self.rpid) + "|" + str(pid) + "|" + str(time.time() - start) + "|" + ftime2 + "|" + output.replace("\n", "") + "|" + str(status) + "|" + self.body)

def createChannel():
        connection = pika.BlockingConnection(pika.ConnectionParameters(host='10.13.27.215', port=56729))
        return connection.channel()
def split_cmd(s):
    """
    str --> [], for subprocess.Popen()
    """
    SC = '"'
    a = s.split(' ')
    cl = []
    i = 0
    while i < len(a) :
        if a[i] == '' :
            i += 1
            continue
        if a[i][0] == SC :
            n = i
            loop = True
            while loop:
                if a[i] == '' :
                    i += 1
                    continue
                if a[i][-1] == SC :
                    loop = False
                    m = i
                i += 1
            #print a[n:m+1]
            #print ' '.join(a[n:m+1])[1:-1]
            cl.append((' '.join(a[n:m + 1]))[1:-1])
        else:
            cl.append(a[i])
            i += 1
    return cl
def callback(ch, method, properties, body):
    print " [x] Received %r" % (body)
    try:
        rpid, subbody = string.split(body, "#")
        t = ThreadClass(subbody, rpid)
        t.start()
    except Exception, e:
        print("error".join(str(subprocess.errno)))
        print(e)
        print(traceback.format_exc())
#    (status, output) = commands.getstatusoutput(body)
def setup():
        connection = pika.BlockingConnection(pika.ConnectionParameters(host='10.13.27.215', port=56729))
        channel = connection.channel()
        channel.basic_consume(callback, queue='hello', no_ack=True)
        #channel.basic_qos(prefetch_count=1)
        #channel.queue_declare(queue='hello')
        channel.start_consuming()
def singleton(cls):
  instances = {}
  def get_instance():
    if cls not in instances:
      instances[cls] = cls()
    return instances[cls]
  return get_instance

@singleton
class mqConUtil:
       def __init__(self):
           self.channel = createChannel()
          
          
          
          
   
if __name__ == '__main__':
    while True:
            try:
                setup()
               
            except Exception, e:
                print("error".join(str(subprocess.errno)))
                print(e)
                print(traceback.format_exc())
#for i in range(1, 1):
#    connection.process_data_events();
    print '
  • Waiting for messages. To exit press CTRL+C-done'

  • 分享到:
    评论

    相关推荐

      智慧IT运维管理解决方案.pdf

      云计算促进了运维模式的集中化、服务化、自动化和远程化;物联网实现了设备资源管控的自动化和智能化;移动互联和社交工具改变了运维工作的方式,提高了运维工作的效率和质量。 在介绍完技术趋势之后,文档对信息...

      IT大数据运维平台解决方案(60页).pptx

      - **从依赖员工技能到运维一体化**:随着自动化和智能化技术的应用,IT运维正朝着更加规范和自动化的方向发展。 - **服务导向运维**:强调以服务为中心的运维理念,确保资源和服务的合理提供、监管和调度。 通过...

      混合云数据中心运维管理发展(1).pptx

      信息部门的组织结构和运维流程也在不断调整,以适应多活、混合云环境的需求,逐步实现运维的标准化、自动化和智能化。 IT服务管理(ITSS)框架为混合云数据中心的运营管理提供了指导。这个框架基于ITIL的理念,同时...

      新技术背景下的运维管理平台.pptx

      总结来说,在新技术背景下,运维管理平台需要适应这些变化,提升自动化和智能化水平,通过统一的管理框架和大数据分析来优化资源分配和服务质量,同时利用物联网技术加强设备监控和预防性维护,以确保IT系统的稳定...

      IT运维信息安全解决方案.docx

      3. **主动阶段**:随着技术的发展,安全运维服务建立了更为严格的安全运行定义,并将系统性能、问题管理、可用性管理、自动化与工作调度作为重点关注领域。 4. **服务阶段**:在此阶段,运维服务能够支持任务计划和...

      IT运维信息安全解决方案(DOC105页).doc

      3. 在主动阶段:运维服务建立了安全运行的定义,并将系统性能、问题管理、可用性管理、自动化与工作调度作为重点; 4. 在服务阶段,运维服务工作中已经可以支持任务计划和服务级别管理; 5. 在价值阶段,运维服务...

      电气及自动化技术在我国钢铁行业的重要性和发展趋势.rar

      再者,信息化技术与电气自动化相结合,形成了智能制造的雏形。通过物联网、大数据分析和人工智能等先进技术,钢铁企业可以实时获取生产数据,进行深入分析,预测设备故障,优化生产计划。这种智能化转型不仅可以降低...

      在线旅游订单系统的微服务架构.pptx

      但是,随着业务的增长,BOSS 系统面临着产品订单库存自动化、统计分析和确认管理等问题。 2. 第二个阶段:NGBOSS 的雏形 在这个阶段,NGBOSS 系统诞生,它基于新的旅游业务架构,引入了资源化和灵活性的概念。...

      solaris操作系统基础培训讲义

      它支持多种资源类型,包括IP地址、磁盘卷、文件系统和应用服务,能够自动检测并响应硬件或软件故障。 ##### 2.2 双机配置实践 双机配置涉及两个独立的节点,通过共享存储和网络连接协同工作。配置步骤包括但不限于...

      人工智能在计算机网络技术中的应用 (43).pdf

      5. 运维自动化:人工智能可以自动完成网络监控、故障检测和修复等运维任务,提高网络维护的效率。 6. 数据管理:人工智能技术可以用于高效地存储和检索大量数据,通过模式识别和数据挖掘技术,发现数据之间的关联和...

      汽车集团电子商务平台项目建设方案.ppt

      - **重要特点**:电商平台具有总体设计思路清晰、在线客服系统完善、业务流程自动化程度高、集成多种系统(如财务、生产、供应链)等特点,确保了业务的高效运作。 - **运维服务**:提供驻场开发、应急运维等即时...

      数据中心机房建设概述.docx

      - **楼宇智能控制机房**:用于楼宇自动化系统的监控和管理。 - **保安监控机房**:负责视频监控和防盗报警。 - **消防控制室**:作为火灾报警和联动控制的中心。 - **卫星接收机房**:用于接收卫星信号。 - **视频...

      云计算平台的成本效用研究

      3. 自动负载分配:根据用户需求和系统负载状况自动调整资源分配,提高资源利用率和响应速度。 4. 成本公式:用于计算云计算平台各项服务的成本,包括资源成本、运维成本等,是评估成本效用的基础。 5. 成本效用函数...

      cis217ApplicationLifecycle:应用程序生命周期的演示

      使用持续集成/持续部署(CI/CD)工具如Jenkins或GitLab CI/CD可以自动化部署流程,减少人为错误。 最后是运维阶段,也称为维护期。在这个阶段,软件需要定期更新以适应变化的需求,修复可能出现的问题,或者优化...

    Global site tag (gtag.js) - Google Analytics