Example #1
0
def system_simple_info(info):
    """
    基本信息接口
    :param info:
    :return:
    """
    from shrimp.service import SystemMonitor, CPUMonitor, MemoryMonitor, DiskMonitor, NetworkMonitor, ProcessMonitor
    if 'boot_time' == info:
        data = {
            'boot_time': SystemMonitor.boot_time()
        }
        return json.dumps(data)
    elif 'platform' == info:
        return json.dumps(SystemMonitor.platform_info())
    elif 'login_users' == info:
        return json.dumps(SystemMonitor.login_users())
    elif 'cpu' == info:
        return json.dumps(CPUMonitor.cpu_simple())
    elif 'memory' == info:
        return json.dumps(MemoryMonitor.memory_simple())
    elif 'disk' == info:
        return json.dumps(DiskMonitor.disk_simple())
    elif 'network' == info:
        return json.dumps(NetworkMonitor.network_simple())
    elif 'process' == info:
        num = request.args.get('num')
        if num is not None and num.isdigit():
            return json.dumps(ProcessMonitor.process_simple(num=int(num)))
        else:
            return json.dumps(ProcessMonitor.process_simple())
    else:
        abort(404)
Example #2
0
def system_cpu_info(info):
    """
    CPU信息接口
    :param info:
    :return:
    """
    from shrimp.service import CPUMonitor
    percpu = False
    if 'true' == request.args.get('percpu'):
        percpu = True
    logical = True
    if 'false' == request.args.get('logical'):
        logical = False

    if 'time' == info:
        return json.dumps(CPUMonitor.cpu_time())
    elif 'percent' == info:
        percent = {
            'percent': CPUMonitor.cpu_percent(percpu=percpu)
        }
        return json.dumps(percent)
    elif 'count' == info:
        count = {
            'count': CPUMonitor.cpu_count(logical=logical)
        }
        return json.dumps(count)
    elif 'stats' == info:
        return json.dumps(CPUMonitor.cpu_stats())
    elif 'freq' == info:
        return json.dumps(CPUMonitor.cpu_freq(percpu=percpu))
    elif 'info' == info:
        return json.dumps(CPUMonitor.cpu_info(percpu=percpu, logical=logical))
    else:
        abort(404)
Example #3
0
def collect_system():
    """
    采集system信息
    :return: 
    """
    import json
    from datetime import datetime
    from shrimp import producer, properties
    from shrimp.service import SystemMonitor, CPUMonitor, MemoryMonitor, DiskMonitor, NetworkMonitor, ProcessMonitor
    platform = SystemMonitor.platform_info()
    data = {
        'ip': platform['ip'],
        'hostname': platform['hostname'],
        'time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        'cpu': CPUMonitor.cpu_simple(),
        'memory': MemoryMonitor.memory_simple(),
        'disk': DiskMonitor.disk_simple(),
        'network': NetworkMonitor.network_simple(),
        'process': ProcessMonitor.process_simple(num=15)
    }
    producer.send(topic=properties.get('kafka.topic.system', 'shrimp-system'),
                  msg=json.dumps(data))
Example #4
0
 def test_cpu_freq(self):
     res = CPUMonitor.cpu_freq(percpu=True)
     print('频率:')
     print(json.dumps(res))
Example #5
0
 def test_cpu_info(self):
     res = CPUMonitor.cpu_info(percpu=True, logical=True)
     print('信息:')
     print(json.dumps(res))
Example #6
0
 def test_cpu_stats(self):
     res = CPUMonitor.cpu_stats()
     print('统计信息:')
     print(json.dumps(res))
Example #7
0
 def test_cpu_count(self):
     res = CPUMonitor.cpu_count(logical=False)
     print('核数:')
     print(res)
Example #8
0
 def test_cpu_percent(self):
     res = CPUMonitor.cpu_percent(percpu=True)
     print('使用率:')
     print(res)
Example #9
0
 def test_cpu_time(self):
     res = CPUMonitor.cpu_time()
     print('时间:')
     print(json.dumps(res))
Example #10
0
 def process_pid_info(cls, pid, info):
     """
     单进程各项信息
     :return:
     """
     try:
         p = psutil.Process(pid=pid)
         if 'ppid' == info:
             # 进程父PID
             return p.ppid
         elif 'name' == info:
             # 进程名称
             return p.name()
         elif 'exe' == info:
             # 该进程执行绝对路径
             return p.exe()
         elif 'cmdline' == info:
             # 执行命令
             return p.cmdline()
         elif 'environ' == info:
             # 环境变量
             return p.environ()
         elif 'create_time' == info:
             # 创建时间
             return datetime.fromtimestamp(p.create_time()).strftime("%Y-%m-%d %H:%M:%S")
         elif 'parent' == info:
             # 父进程
             return p.parent().as_dict()
         elif 'status' == info:
             # 进程状态
             return p.status()
         elif 'cwd' == info:
             # 进程当前工作目录
             return p.cwd()
         elif 'username' == info:
             # 拥有该进程用户的名称
             return p.username()
         elif 'nice' == info:
             # 进程优先级
             return p.nice()
         elif 'ionice' == info:
             # 进程IO优先级
             return p.ionice()
         elif 'io_counters' == info:
             # 进程IO统计信息
             return p.io_counters()
         elif 'num_ctx_switches' == info:
             # 上下文切换次数
             return p.num_ctx_switches()
         elif 'num_handles' == info:
             # 句柄数
             return p.num_handles()
         elif 'num_threads' == info:
             # 线程数
             return p.num_threads()
         elif 'threads' == info:
             # 相关线程
             thread_list = []
             for thread in p.threads():
                 thread_list.append(thread._asdict())
             return thread_list
         elif 'cpu_percent' == info:
             # CPU频率
             from shrimp.service import CPUMonitor
             percent = p.cpu_percent(interval=0.1)
             count = CPUMonitor.cpu_count(logical=True)
             return percent/count
         elif 'memory_info' == info:
             # 内存信息
             return p.memory_info()._asdict()
         elif 'open_files' == info:
             # 进程所打开的文件
             file_list = []
             for file in p.open_files():
                 file_list.append(file._asdict())
             return file_list
         elif 'connections' == info:
             # 套接字连接
             conn_list = []
             for conn in p.connections():
                 conn_list.append(conn._asdict())
             return conn_list
         elif 'is_running' == info:
             # 进程是否存在
             return p.is_running()
     except psutil.NoSuchProcess:
         return ''