Python 监控脚本

Python 监控脚本

整体通过psutil模块动态获取资源信息。下为示例图:

   1 #!/usr/bin/env python
   2 # -*- coding: utf-8 -*-
   3 # @Time: 2019-07-01 17:23:01
   4 # @Author: Kevin.Xiang
   5 #-----------------------------------------
   6 # Start margin size: 100x100
   7 # The startup script: python3 monitoring.py 
   8 # Close the script: q
   9 # matters need attention: forbid "ctrl + c"
  10 #-----------------------------------------
  11 # ############# debugger ############## #
  12 # from pudb import set_trace;set_trace()#
  13 
  14 import queue
  15 import threading
  16 import os
  17 import sys
  18 import psutil
  19 import time
  20 import term
  21 import tty
  22 import termios
  23 import datetime
  24 import platform
  25 from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
  26 
  27 
  28 class Run(object):
  29     """Perform each task"""
  30 
  31     def run(self):
  32         """Enable multithreading to complete tasks"""
  33 
  34         global flag
  35         flag = True
  36 
  37         thread_get = threading.Thread(
  38             target=Manage("get").mamage_get)
  39         thread_cpu = threading.Thread(
  40             target=Manage("frames_cpu").mamage_put)
  41         thread_memory = threading.Thread(
  42             target=Manage("frames_memory").mamage_put)
  43         thread_swap = threading.Thread(
  44             target=Manage("frames_swap").mamage_put)
  45         thread_disk = threading.Thread(
  46             target=Manage("frames_disk").mamage_put)
  47         thread_diskio = threading.Thread(
  48             target=Manage("frames_diskio").mamage_put)
  49         thread_system = threading.Thread(
  50             target=Manage("frames_system").mamage_put)
  51         thread_network = threading.Thread(
  52             target=Manage("frames_network").mamage_put)
  53         thread_version = threading.Thread(
  54             target=Manage("frames_version").mamage_put)
  55         thread_process = threading.Thread(
  56             target=Manage("frames_process").mamage_put)
  57 
  58         thread_process.start()
  59         thread_cpu.start()
  60         thread_memory.start()
  61         thread_swap.start()
  62         thread_disk.start()
  63         thread_diskio.start()
  64         thread_network.start()
  65         thread_system.start()
  66         thread_version.start()
  67         thread_get.start()
  68 
  69         # Short execution framewor
  70         frames = Frames()
  71         time.sleep(1)
  72         term.clear()
  73         term.pos(1, 0)
  74         frames.header()
  75         term.pos(2, 0)
  76         time.sleep(3)
  77 
  78         # Judge the input and exit
  79         fd = sys.stdin.fileno()
  80         old_settings = termios.tcgetattr(fd)
  81         tty.setraw(sys.stdin.fileno())
  82         quit = sys.stdin.read(1)
  83         termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
  84         if len(quit) == 1:
  85             flag = False
  86             time.sleep(1)
  87             que.queue.clear()
  88             # Reduction of the cursor
  89             os.system("echo -e \033[?25h")
  90             term.pos(1, 0)
  91             term.clear()
  92 
  93 
  94 class Manage(object):
  95     """Manage the operations of each class"""
  96 
  97     def __init__(self, name):
  98         self.name = name
  99 
 100     def mamage_put(self):
 101         """Threads are specified by reflection as methods"""
 102 
 103         frames = Frames()
 104         while flag:
 105             getattr(frames, self.name)()
 106             time.sleep(0.1)
 107 
 108     def mamage_get(self):
 109         """Output the value under the fixed method according to the category"""
 110         
 111         while flag:
 112             value = que.get()
 113             value_type = value["type"]
 114             if value_type == "cpu":
 115                 self.mamage_cpu(value)
 116             if value_type == "memory":
 117                 self.mamage_memory(value)
 118             if value_type == "swap":
 119                 self.mamage_swap(value)
 120             if value_type == "disk":
 121                 self.mamage_disk(value)
 122             if value_type == "diskio":
 123                 self.mamage_diskio(value)
 124             if value_type == "network":
 125                 self.mamage_network(value)
 126             if value_type == "system":
 127                 self.mamage_system(value)
 128             if value_type == "version":
 129                 self.mamage_version(value)
 130             if value_type == "process":
 131                 self.mamage_process(value)
 132             # Second judgment to clean message queue
 133             if flag == False:
 134                 que.queue.clear()
 135             time.sleep(0.01)
 136 
 137     def mamage_cpu(self, value):
 138         """CPU output format"""
 139         
 140         term.pos(7, 4)
 141         term.write("CPU", term.bold)
 142         term.pos(7, 19)
 143         term.write("     ")
 144         term.pos(7, 8)
 145         # Output progress bar
 146         percent = ("%s%%" % (int(value["total"])))
 147         term.write("[%-10s]%s" % ("|" * int(value["total"]/10), percent))
 148         term.pos(7, 30)
 149         term.write("-CPU-", term.bold)
 150         term.pos(7, 45)
 151         term.write("        ")
 152         term.pos(7, 39)
 153         term.write("total: %s %%" % (round(value["total"], 1)))
 154         term.pos(7, 60)
 155         term.write("        ")
 156         term.pos(7, 55)
 157         term.write("used: %s %%" % (round(value["user"], 1)))
 158         term.pos(7, 75)
 159         term.write("        ")
 160         term.pos(7, 70)
 161         term.write("syst: %s %%" % (round(value["system"], 1)))
 162         term.pos(8, 45)
 163         term.write("        ")
 164         term.pos(8, 39)
 165         term.write("iowai: %s %%" % (round(value["iowait"], 1)))
 166         term.pos(8, 60)
 167         term.write("        ")
 168         term.pos(8, 55)
 169         term.write("nice: %s %%" % (round(value["nice"], 1)))
 170         term.pos(8, 75)
 171         term.write("        ")
 172         term.pos(8, 70)
 173         term.write("nice: %s %%" % (round(value["idle"], 1)))
 174         term.pos(7, 4)
 175 
 176     def mamage_memory(self, value):
 177         """Memory output format"""
 178         
 179         term.pos(9, 4)
 180         term.write("Mem", term.bold)
 181         term.pos(9, 8)
 182         total = (value["used"]/value["total"]) * 100
 183         percent = ("%s%%" % (int(total)))
 184         term.write("[%-10s]%s" % ("|" * int(total/10), percent))
 185         term.pos(9, 30)
 186         term.write("-MEM-", term.bold)
 187         term.pos(9, 39)
 188         term.write("total: %s MB" % (int(value["total"])))
 189         term.pos(9, 55)
 190         term.write("used: %s MB" % (int(value["used"])))
 191         term.pos(9, 70)
 192         term.write("free: %s MB" % (int(value["free"])))
 193         term.pos(10, 39)
 194         term.write("activ: %s MB" % (int(value["active"])))
 195         term.pos(10, 55)
 196         term.write("buff: %s MB" % (int(value["buffers"])))
 197         term.pos(10, 70)
 198         term.write("cach: %s MB" % (int(value["cached"])))
 199         term.pos(9, 4)
 200 
 201     def mamage_swap(self, value):
 202         """Swap output format"""
 203         
 204         term.pos(11, 3)
 205         term.write("Swap", term.bold)
 206         term.pos(11, 8)
 207         # Determine if the value is 0 and the exception is caught
 208         try:
 209             total = (int(value["used"])/int(value["total"])) * 100
 210         except ZeroDivisionError:
 211             total = 0
 212         percent = ("%s%%" % (int(total)))
 213         term.write("[%-10s]%s" % ("|" * int(total/10), percent))
 214         term.pos(11, 30)
 215         term.write("-Swap-", term.bold)
 216         term.pos(11, 39)
 217         term.write("total: %s MB" % (int(value["total"])))
 218         term.pos(11, 55)
 219         term.write("used: %s MB" % (int(value["used"])))
 220         term.pos(11, 70)
 221         term.write("free: %s MB" % (int(value["free"])))
 222         term.pos(12, 41)
 223         term.write("sin: %s MB" % (int(value["sin"])))
 224         term.pos(12, 55)
 225         term.write("sout: %s MB" % (int(value["sout"])))
 226         term.pos(12, 70)
 227         term.write("perc: %s %%" % (str(value["percent"])))
 228         term.pos(11, 3)
 229 
 230     def mamage_disk(self, value):
 231         """Disk output format"""
 232         
 233         term.pos(13, 3)
 234         term.write("Disk", term.bold)
 235         term.pos(13, 8)
 236         total = (value["used"]/value["total"]) * 100
 237         percent = ("%s%%" % (int(total)))
 238         term.write("[%-10s]%s" % ("|" * int(total/10), percent))
 239         term.pos(13, 30)
 240         term.write("-Disk-", term.bold)
 241         term.pos(13, 39)
 242         term.write("total: %s GB" % (int(value["total"])))
 243         term.pos(13, 55)
 244         term.write("used: %s GB" % (int(value["used"])))
 245         term.pos(13, 70)
 246         term.write("free: %s GB" % (int(value["free"])))
 247         term.pos(13, 3)
 248 
 249     def mamage_system(self, value):
 250         """System output format"""
 251         
 252         day, now = time.strftime("%Y-%m-%d %H:%M:%S").split()
 253         course_pid = psutil.pids()
 254         course_count = 0
 255         for i in course_pid:
 256             course_count = course_count + 1
 257 
 258         term.pos(2, 4)
 259         term.write("USER: " + str(value["username"]))
 260         term.pos(2, 16)
 261         term.write("T: " + str(value["terminal"]))
 262         term.pos(2, 28)
 263         term.write("-")
 264         term.pos(2, 33)
 265         term.write("Process: " + str(course_count))
 266         term.pos(2, 48)
 267         term.write("-")
 268         term.pos(2, 53)
 269         term.write("BootTime: " + str(value["BootTime"]))
 270         term.pos(4, 4)
 271         term.write("HOST: " + str(value["hostname"]))
 272         term.pos(4, 28)
 273         term.write("-")
 274         term.pos(4, 32)
 275         term.write("Sec: " + str(now))
 276         term.pos(4, 48)
 277         term.write("-")
 278         term.pos(4, 53)
 279         term.write("LogiTime: " + str(value["started"]))
 280         term.pos(2, 3)
 281 
 282     def mamage_network(self, value):
 283         """Network output format"""
 284         
 285         term.pos(20, 68)
 286         term.clearLineFromPos()
 287         term.write("TX: " + str(round(value["send"], 2)) + " KB")
 288         term.pos(20, 88)
 289         term.write("|", term.bold)
 290         term.pos(21, 68)
 291         term.clearLineFromPos()
 292         term.write("RX: " + str(round(value["recv"], 2)) + " KB")
 293         term.pos(21, 88)
 294         term.write("|", term.bold)
 295         term.pos(22, 67)
 296         term.write("TXP: " + str(value["packets_sent"]))
 297         term.pos(23, 67)
 298         term.write("TXP: " + str(value["packets_recv"]))
 299         term.pos(20, 68)
 300 
 301     def mamage_diskio(self, value):
 302         """Disk IO output format"""
 303         
 304         term.pos(31, 68)
 305         term.clearLineFromPos()
 306         term.write("Read: " + str(round(value["read"], 2)) + " KB")
 307         term.pos(31, 88)
 308         term.write("|", term.bold)
 309         term.pos(32, 68)
 310         term.clearLineFromPos()
 311         term.write("Wrtn: " + str(round(value["write"], 2)) + " KB")
 312         term.pos(32, 88)
 313         term.write("|", term.bold)
 314         term.pos(33, 68)
 315         term.write("Rsec: " + str(value["read_count"]))
 316         term.pos(34, 68)
 317         term.write("Wsec: " + str(value["write_count"]))
 318         term.pos(35, 69)
 319         term.write("Tps: " + str(value["tps"]))
 320         term.pos(32, 68)
 321 
 322     def mamage_process(self, value):
 323         """Process output format"""
 324         
 325         value = value["key"]
 326         count = 19
 327         # Loop outputs each process
 328         for v in value:
 329             term.pos(count, 3)
 330             term.write(v["user"])
 331             term.pos(count, 11)
 332             term.write(str(v["pid"]))
 333             term.pos(count, 18)
 334             term.write(str(v["cpu"]))
 335             term.pos(count, 26)
 336             term.write(str(round(v["memory"], 2)))
 337             term.pos(count, 34)
 338             term.write(str(v["threads"]))
 339             term.pos(count, 42)
 340             term.write(str(v["name"]))
 341             count = count + 1
 342         term.pos(18, 4)
 343 
 344     def mamage_version(self, value):
 345         """Version of the output"""
 346         
 347         term.pos(16, 3)
 348         term.write(value["system"])
 349         term.pos(16, 10)
 350         term.write(value["version"])
 351 
 352 
 353 class Frames(object):
 354     """Terminal screen module"""
 355 
 356     def header(self):
 357         """Frame structure format output"""
 358 
 359         # upper part
 360         bold = term.format("#", term.bold)
 361         frame_up = bold.ljust(100, "=")
 362         frame_up_format = term.format(frame_up)
 363         term.write(frame_up_format+bold)
 364 
 365         # center section 1
 366         term.pos(3, 0)
 367         frame_three = term.format("+".ljust(87, "-"))
 368         term.write(frame_three+"+")
 369 
 370         # center section 2
 371         term.pos(5, 0)
 372         frame_five = term.format("+".ljust(87, "-"))
 373         term.write(frame_five+"+")
 374 
 375         # center section 3
 376         frame_centre1 = "+".ljust(87, "=")
 377         term.pos(15, 0)
 378         term.write(frame_centre1+"+")
 379 
 380         # center section 4
 381         frame_centre2 = "+".ljust(59, "=")
 382         term.pos(17, 0)
 383         term.write(frame_centre2)
 384         term.pos(17, 88)
 385         term.write("|", term.bold)
 386 
 387         # Producer information
 388         kevin = "Kevin.Xiang"
 389         term.pos(16, 47)
 390         term.write(kevin)
 391 
 392         # next part
 393         frame_down = bold.ljust(100, "=")
 394         term.pos(39, 0)
 395         term.write(frame_down+bold)
 396 
 397         # border style
 398         for i1 in range(7, 14):
 399             term.pos(i1, 26)
 400             term.write("|")
 401 
 402         for i2 in range(16, 39):
 403             term.pos(i2, 60)
 404             term.write("|", term.bold)
 405 
 406         # Border output style IO
 407         term.pos(16, 61)
 408         frame_back = term.format("".rjust(27, " "), term.bgwhite)
 409         term.write(frame_back)
 410         term.pos(16, 71)
 411         frame_network = term.format("NETWORK", term.black, term.bgwhite)
 412         term.write(frame_network)
 413         term.pos(27, 61)
 414         term.write(frame_back)
 415         term.pos(27, 73)
 416         frame_disk = term.format("DISK", term.black, term.bgwhite)
 417         term.write(frame_disk)
 418 
 419         # Process output style
 420         term.pos(18, 0)
 421         space = "".center(4, " ")
 422         frame = term.format("  USER"
 423                             + space
 424                             + "PID"
 425                             + space
 426                             + "CPU%"
 427                             + space
 428                             + "MEM%"
 429                             + space
 430                             + "THRE"
 431                             + space
 432                             + "NAME", term.bold)
 433         term.write(frame)
 434 
 435         # Border output style
 436         list_down = [2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 21,
 437                      22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]
 438         for i3 in list_down:
 439             term.pos(i3, 0)
 440             term.write("|", term.bold)
 441             term.pos(i3, 88)
 442             term.write("|", term.bold)
 443 
 444     def frames_cpu(self):
 445         """CPU statistics"""
 446         
 447         t1 = psutil.cpu_times()
 448         time.sleep(1)
 449         t2 = psutil.cpu_times()
 450 
 451         value = []
 452         for v1, v2 in zip(t1, t2):
 453             value.append(v2-v1)
 454 
 455         count = 0
 456         for v in value:
 457             count = count + v
 458 
 459         user = value[0]
 460         nice = value[1]
 461         system = value[2]
 462         idle = value[3]
 463         iowait = value[4]
 464         irq = value[5]
 465         softirq = value[6]
 466         steal = value[7]
 467         guest = value[8]
 468         guest_nice = value[9]
 469         total = count
 470 
 471         cpu = Cpu(user, nice, system, idle, iowait,
 472                   irq, softirq, steal, guest, guest_nice, total)
 473 
 474         cpu_out = {
 475             "total": cpu.cpu_total(),
 476             "user": cpu.cpu_user(),
 477             "system": cpu.cpu_system(),
 478             "idle": cpu.cpu_idle(),
 479             "iowait": cpu.cpu_iowait(),
 480             "nice": cpu.cpu_nice(),
 481             "type": "cpu"
 482         }
 483 
 484         que.put(cpu_out)
 485 
 486     def frames_memory(self):
 487         """Memory statistics"""
 488         
 489         time.sleep(1)
 490         value = psutil.virtual_memory()
 491         used = value.used
 492         free = value.free
 493         active = value.active
 494         inactive = value.inactive
 495         buffers = value.buffers
 496         cached = value.cached
 497         total = value.total
 498 
 499         memory = Memory(used, free, active, inactive,
 500                         buffers, cached, total)
 501 
 502         memory_out = {
 503             "total": memory.memory_total(),
 504             "used": memory.memory_used(),
 505             "free": memory.memory_free(),
 506             "active": memory.memory_active(),
 507             "buffers": memory.memory_buffers(),
 508             "cached": memory.memory_cached(),
 509             "type": "memory"
 510         }
 511         que.put(memory_out)
 512 
 513     def frames_swap(self):
 514         """Swap information statistics"""
 515         
 516         time.sleep(1)
 517         value = psutil.swap_memory()
 518         used = value.used
 519         free = value.free
 520         sin = value.sin
 521         sout = value.sout
 522         total = value.total
 523         percent = value.percent
 524 
 525         swap = Swap(used, free, sin, sout, total, percent)
 526 
 527         swap_out = {
 528             "total": swap.swap_total(),
 529             "used": swap.swap_used(),
 530             "free": swap.swap_free(),
 531             "sin": swap.swap_sin(),
 532             "sout": swap.swap_sout(),
 533             "percent": swap.swap_percent(),
 534             "type": "swap"
 535         }
 536 
 537         que.put(swap_out)
 538 
 539     def frames_disk(self):
 540         """Information statistics only get / contents disk"""
 541         
 542         time.sleep(1)
 543         value = psutil.disk_usage('/')
 544         used = value.used
 545         free = value.free
 546         total = value.total
 547 
 548         disk = Disk(used, free, total)
 549 
 550         disk_out = {
 551             "total": disk.disk_total(),
 552             "used": disk.disk_used(),
 553             "free": disk.disk_free(),
 554             "type": "disk"
 555         }
 556 
 557         que.put(disk_out)
 558 
 559     def frames_diskio(self):
 560         """Disk IO statistics"""
 561         
 562         t1_diskio = psutil.disk_io_counters()
 563         time.sleep(1)
 564         t2_diskio = psutil.disk_io_counters()
 565 
 566         read = t2_diskio.read_bytes - t1_diskio.read_bytes
 567         write = t2_diskio.write_bytes - t1_diskio.write_bytes
 568         read_count = t2_diskio.read_count - t1_diskio.read_count
 569         write_count = t2_diskio.write_count - t1_diskio.write_count
 570         tps = t2_diskio.read_count + t2_diskio.write_count - \
 571             t1_diskio.read_count - t1_diskio.write_count
 572 
 573         diskio = Diskio(read, write, read_count, write_count, tps)
 574 
 575         diskio_out = {
 576             "read": diskio.diskio_read(),
 577             "write": diskio.diskio_write(),
 578             "read_count": diskio.diskio_read_count(),
 579             "write_count": diskio.diskio_write_count(),
 580             "tps": diskio.diskio_tps(),
 581             "type": "diskio"
 582         }
 583         que.put(diskio_out)
 584 
 585     def frames_network(self):
 586         """Network statistics"""
 587         
 588         t1 = psutil.net_io_counters()
 589         time.sleep(1)
 590         t2 = psutil.net_io_counters()
 591 
 592         value = []
 593         for v1, v2 in zip(t1, t2):
 594             value.append(v2-v1)
 595 
 596         bytes_sent = value[0]
 597         bytes_recv = value[1]
 598         packets_sent = value[2]
 599         packets_recv = value[3]
 600 
 601         network = Network(bytes_sent, bytes_recv,
 602                           packets_sent, packets_recv)
 603 
 604         network_out = {
 605             "send": network.network_bytes_sent(),
 606             "recv": network.network_bytes_recv(),
 607             "packets_sent": network.network_packets_sent(),
 608             "packets_recv": network.network_packets_recv(),
 609             "type": "network"
 610         }
 611 
 612         que.put(network_out)
 613 
 614     def frames_system(self):
 615         """System of statistical"""
 616         
 617         time.sleep(1)
 618         boot_time = psutil.boot_time()
 619         tty = os.popen("tty").read().replace('/dev/', '', 1).strip()
 620         value = psutil.users()
 621         for v in value:
 622             if v.terminal == tty:
 623                 username = v.name
 624                 terminal = v.terminal
 625                 hostname = v.host
 626                 started = v.started
 627                 userpid = v.pid
 628 
 629         system = System(boot_time, username,
 630                         terminal, hostname, started, userpid)
 631 
 632         system_out = {
 633             "BootTime": system.system_boot_time(),
 634             "username": system.system_username(),
 635             "terminal": system.system_terminal(),
 636             "hostname": system.system_hostname(),
 637             "started": system.system_started(),
 638             "userpid": system.system_userpid(),
 639             "type": "system",
 640         }
 641         que.put(system_out)
 642 
 643     def frames_version(self):
 644         """Version statistics"""
 645         
 646         time.sleep(1)
 647         value = platform.uname()
 648         system = value.system
 649         localhost = value.node
 650         kernel = value.release
 651         sysver = value.version
 652         machine = value.machine
 653 
 654         version = Version(system, localhost, kernel, sysver, machine)
 655 
 656         version_out = {
 657             "system": version.version_system(),
 658             "localhost": version.version_localhost(),
 659             "kernel": version.version_kernel(),
 660             "version": version.version_sysver(),
 661             "machine": version.version_machine(),
 662             "type": "version"
 663         }
 664 
 665         que.put(version_out)
 666 
 667     def frames_process(self):
 668         """Process statistics"""
 669         
 670         time.sleep(1)
 671         list1 = []
 672 
 673         PID = psutil.pids()
 674 
 675         for p in PID:
 676             try:
 677                 proc = psutil.Process(p)
 678                 user = proc.uids()[0]
 679                 name = proc.name()
 680                 pid = p
 681                 cpu = proc.cpu_percent(interval=0)
 682                 memory = proc.memory_percent()
 683                 status = proc.status()
 684                 threads = proc.num_threads()
 685 
 686                 process = Process(user, name, pid, cpu,
 687                                   memory, status, threads)
 688                 dist1 = {
 689                     "user": process.process_user(),
 690                     "name": process.process_name(),
 691                     "pid": process.process_pid(),
 692                     "cpu": process.process_cpu(),
 693                     "memory": process.process_memory(),
 694                     "status": process.process_status(),
 695                     "threads": process.process_threads(),
 696                 }
 697                 list1.append(dist1)
 698             except:
 699                 continue
 700 
 701         # Arrange by key in the dictionary
 702         list2 = sorted(list1, key=lambda x: x["threads"], reverse=True)
 703 
 704         list3 = []
 705         count = 0
 706         for p2 in list2:
 707             list3.append(p2)
 708             count = count + 1
 709             if count == 19:
 710                 break
 711 
 712         process_out = {
 713             "key": list3,
 714             "type": "process"
 715         }
 716 
 717         que.put(process_out)
 718 
 719 
 720 class Cpu(object):
 721     """ CPU usage information """
 722 
 723     def __init__(self, user, nice, system, idle, iowait, irq,
 724                  softirq, steal, guest, guest_nice, total):
 725 
 726         self.user = user
 727         self.nice = nice
 728         self.system = system
 729         self.idle = idle
 730         self.iowait = iowait
 731         self.irq = irq
 732         self.softirq = softirq
 733         self.steal = steal
 734         self.guest = guest
 735         self.guest_nice = guest_nice
 736         self.total = total
 737 
 738     def cpu_user(self):
 739         """User utilization"""
 740 
 741         cpu_user = (self.user / self.total) * 100
 742         return cpu_user
 743 
 744     def cpu_nice(self):
 745         """Nice usage rate"""
 746 
 747         cpu_nice = (self.nice / self.total) * 100
 748         return cpu_nice
 749 
 750     def cpu_system(self):
 751         """System utilization"""
 752 
 753         cpu_system = (self.system / self.total) * 100
 754         return cpu_system
 755 
 756     def cpu_idle(self):
 757         """CPU available space"""
 758 
 759         cpu_idle = (self.idle / self.total) * 100
 760         return cpu_idle
 761 
 762     def cpu_iowait(self):
 763         """Disk IO usage"""
 764 
 765         cpu_iowait = (self.iowait / self.total) * 100
 766         return cpu_iowait
 767 
 768     def cpu_total(self):
 769         """The total usage"""
 770 
 771         cpu_total = self.user
 772         cpu_total = ((self.total - self.idle) / self.total) * 100
 773         return cpu_total
 774 
 775 
 776 class Memory(object):
 777     """Memory information details"""
 778 
 779     def __init__(self, used, free, active, inactive, buffers, cached, total):
 780 
 781         self.used = used
 782         self.free = free
 783         self.active = active
 784         self.inactive = inactive
 785         self.buffers = buffers
 786         self.cached = cached
 787         self.total = total
 788 
 789     def memory_used(self):
 790         """Memory user usage"""
 791 
 792         memory_used = self.used/1024/1024
 793         return memory_used
 794 
 795     def memory_free(self):
 796         """The true remaining memory size"""
 797 
 798         memory_free = self.free/1024/1024
 799         return memory_free
 800 
 801     def memory_active(self):
 802         """The memory program considers the size available to contain the cache buffer"""
 803 
 804         memory_active = self.active/1024/1024
 805         return memory_active
 806 
 807     def memory_inactive(self):
 808         """Unused memory does not contain caches"""
 809 
 810         memory_inactive = self.inactive/1024/1024
 811         return memory_inactive
 812 
 813     def memory_buffers(self):
 814         """Buffer usage memory"""
 815 
 816         memory_buffers = self.buffers/1024/1024
 817         return memory_buffers
 818 
 819     def memory_cached(self):
 820         """Unused memory does not contain caches"""
 821 
 822         memory_cached = self.cached/1024/1024
 823         return memory_cached
 824 
 825     def memory_total(self):
 826         """Total memory size"""
 827 
 828         memory_total = self.total/1024/1024
 829         return memory_total
 830 
 831 
 832 class Swap(object):
 833     """Virtual memory information"""
 834 
 835     def __init__(self, used, free, sin, sout, total, percent):
 836         self.used = used
 837         self.free = free
 838         self.sin = sin
 839         self.sout = sout
 840         self.total = total
 841         self.percent = percent
 842 
 843     def swap_used(self):
 844         """Virtual memory used by users"""
 845 
 846         swap_used = self.used/1024/1024
 847         return swap_used
 848 
 849     def swap_free(self):
 850         """Virtual memory remaining space"""
 851 
 852         swap_free = self.free/1024/1024
 853         return swap_free
 854 
 855     def swap_sin(self):
 856         """The system accumulates the number of MB swapped in from disk"""
 857 
 858         swap_sin = self.sin/1024/1024
 859         return swap_sin
 860 
 861     def swap_sout(self):
 862         """The number of MB the system accumulates from disk """
 863 
 864         swap_sout = self.sin/1024/1024
 865         return swap_sout
 866 
 867     def swap_total(self):
 868         """Total virtual memory size"""
 869 
 870         swap_total = self.total/1024/1024
 871         return swap_total
 872 
 873     def swap_percent(self):
 874         """Using percentage swap"""
 875 
 876         swap_percent = self.percent
 877         return swap_percent
 878 
 879 
 880 class Disk(object):
 881     """Disk resource information"""
 882 
 883     def __init__(self, used, free, total):
 884         self.used = used
 885         self.free = free
 886         self.total = total
 887 
 888     def disk_used(self):
 889         """Disk user use GB """
 890 
 891         disk_used = self.used/1024/1024/1024
 892         return disk_used
 893 
 894     def disk_free(self):
 895         """Disk space GB"""
 896 
 897         disk_free = self.free/1024/1024/1024
 898         return disk_free
 899 
 900     def disk_total(self):
 901         """Total disk size GB"""
 902 
 903         disk_total = self.total/1024/1024/1024
 904         return disk_total
 905 
 906 
 907 class Diskio(object):
 908     """View disk IO"""
 909 
 910     def __init__(self, read, write, read_count, write_count, tps):
 911         self.read = read
 912         self.write = write
 913         self.read_count = read_count
 914         self.write_count = write_count
 915         self.tps = tps
 916 
 917     def diskio_read(self):
 918         """A disk read kb"""
 919 
 920         diskio_read = self.read/1024
 921         return diskio_read
 922 
 923     def diskio_write(self):
 924         """A disk read kb"""
 925 
 926         diskio_write = self.write/1024
 927         return diskio_write
 928 
 929     def diskio_read_count(self):
 930         """Merge reads"""
 931 
 932         diskio_read_count = self.read_count
 933         return diskio_read_count
 934 
 935     def diskio_write_count(self):
 936         """Merge write times"""
 937 
 938         diskio_write_count = self.write_count
 939         return diskio_write_count
 940 
 941     def diskio_tps(self):
 942         """Read/write IO handles a response transaction"""
 943 
 944         diskio_tps = self.tps
 945         return diskio_tps
 946 
 947 
 948 class Network(object):
 949     """Network resource information"""
 950 
 951     def __init__(self, bytes_sent, bytes_recv, packets_sent, packets_recv):
 952         self.bytes_sent = bytes_sent
 953         self.bytes_recv = bytes_recv
 954         self.packets_sent = packets_sent
 955         self.packets_recv = packets_recv
 956 
 957     def network_bytes_sent(self):
 958         """The network sends packets in kilobytes per second"""
 959 
 960         network_bytes_sent = self.bytes_sent/1024
 961         return network_bytes_sent
 962 
 963     def network_bytes_recv(self):
 964         """The network receives traffic in kilobytes per second"""
 965 
 966         network_bytes_recv = self.bytes_recv/1024
 967         return network_bytes_recv
 968 
 969     def network_packets_sent(self):
 970         """Number of packets sent per second"""
 971 
 972         network_packets_sent = self.packets_sent
 973         return network_packets_sent
 974 
 975     def network_packets_recv(self):
 976         """Number of packets received per second"""
 977 
 978         network_packets_recv = self.packets_recv
 979         return network_packets_recv
 980 
 981 
 982 class System(object):
 983     """System resource information"""
 984 
 985     def __init__(self, boot_time, username, terminal, hostname, started, userpid):
 986         self.boot_time = boot_time
 987         self.username = username
 988         self.terminal = terminal
 989         self.hostname = hostname
 990         self.started = started
 991         self.userpid = userpid
 992 
 993     def system_boot_time(self):
 994         """System startup time"""
 995 
 996         system_boot_time = datetime.datetime.fromtimestamp(
 997             self.boot_time).strftime("%Y-%m-%d %H:%M:%S")
 998         return system_boot_time
 999 
1000     def system_username(self):
1001         """Current logged-in user"""
1002 
1003         system_username = self.username
1004         return system_username
1005 
1006     def system_terminal(self):
1007         """User access terminal"""
1008 
1009         system_terminal = self.terminal
1010         return system_terminal
1011 
1012     def system_hostname(self):
1013         """Connect user IP"""
1014 
1015         system_hostname = self.hostname
1016         return system_hostname
1017 
1018     def system_started(self):
1019         """User time"""
1020 
1021         system_started = datetime.datetime.fromtimestamp(
1022             self.started).strftime("%Y-%m-%d %H:%M:%S")
1023 
1024         return system_started
1025 
1026     def system_userpid(self):
1027         """User pid"""
1028 
1029         system_userpid = self.userpid
1030         return system_userpid
1031 
1032 
1033 class Version(object):
1034     """system version"""
1035 
1036     def __init__(self, system, localhost, kernel, sysver, machine):
1037         self.system = system
1038         self.localhost = localhost
1039         self.kernel = kernel
1040         self.sysver = sysver
1041         self.machine = machine
1042 
1043     def version_system(self):
1044         """system type"""
1045 
1046         version_system = self.system
1047         return version_system
1048 
1049     def version_localhost(self):
1050         """Localhost name"""
1051 
1052         version_localhost = self.localhost
1053         return version_localhost
1054 
1055     def version_kernel(self):
1056         """Kernel version"""
1057 
1058         version_kernel = self.kernel
1059         return version_kernel
1060 
1061     def version_sysver(self):
1062         """system version"""
1063 
1064         version_sysver = self.sysver
1065         return version_sysver
1066 
1067     def version_machine(self):
1068         """System digits"""
1069 
1070         version_machine = self.machine
1071         return version_machine
1072 
1073 
1074 class Process(object):
1075     """Process information"""
1076 
1077     def __init__(self, user, name, pid, cpu, memory, status, threads):
1078         self.user = user
1079         self.name = name
1080         self.pid = pid
1081         self.cpu = cpu
1082         self.memory = memory
1083         self.status = status
1084         self.threads = threads
1085 
1086     def process_user(self):
1087         process_user = os.popen(
1088             "getent passwd %s | awk -F':' '{print $1}'" % (self.user))
1089         user = process_user.read()
1090         process_user = user
1091 
1092         return process_user
1093 
1094     def process_name(self):
1095         """process name"""
1096 
1097         process_name = self.name
1098         return process_name
1099 
1100     def process_pid(self):
1101         """process pid"""
1102 
1103         process_pid = self.pid
1104         return process_pid
1105 
1106     def process_cpu(self):
1107         """process cpu"""
1108 
1109         process_cpu = self.cpu
1110 
1111         return process_cpu
1112 
1113     def process_memory(self):
1114         """process memory"""
1115 
1116         process_memory = self.memory
1117         return process_memory
1118 
1119     def process_status(self):
1120         """process status"""
1121 
1122         process_status = self.status
1123         return process_status
1124 
1125     def process_threads(self):
1126         """process threads"""
1127 
1128         process_threads = self.threads
1129         return process_threads
1130 
1131 
1132 if __name__ == '__main__':
1133     que = queue.Queue()
1134     start = Run()
1135     os.system("echo -e \033[?25l")
1136     start.run()
monitoring.py

猜你喜欢

转载自www.cnblogs.com/xiangsikai/p/11236833.html