การเขียนโปรแกรม Python เพื่อตรวจสอบสถานะของเครื่อง Server - mrolarik/simple-iot GitHub Wiki

ตัวอย่างการทำงานของ Linux command และการเขียน Python เพื่อเรียกใช้ Linux command ได้กล่าวไว้ในบทความ ดังต่อไปนี้

ในบทความนี้ได้กล่าวถึงการเขียนโปรแกรม Python เพื่อตรวจสอบสถานะของเครื่อง Server โดยมีลำดับขั้นตอน ดังต่อไปนี้

การสร้างฟังก์ชัน (Function)

  • ในภาษา Python การสร้างฟังก์ชันสามารถกำหนดโดยใช้ keyword คือ def ซึ่งมาจากคำว่า definition การสร้างฟังก์ชันสามารถทำได้ดังนี้
def function_name():
    statement1
    statement2

จากตัวอย่างข้างต้น ฟังก์ชันที่สร้างขึ้นชื่อ function_name เป็นฟังก์ชันที่ไม่ต้องการพารามิเตอร์ (Parameter) และไม่มีการคืนค่า (return value) กลับออกจากฟังก์ชัน

  • การเรียกใช้ฟังก์ชันสามารถทำได้โดย
function_name()
  • หากต้องการสร้างฟังก์ชันที่มีการส่งพารามิเตอร์เข้าไปคำนวณ และมีการคืนค่ากลับออกจากฟังก์ชัน สามารถทำได้โดย
def function_add(para1, para2):
    var1 = para1 + para2

    return var1

จากตัวอย่าง ทำการสร้างฟังก์ชันชื่อ function_add โดยฟังก์ชันนี้ได้รับตัวแปร หรือพารามิเตอร์ จำนวน 2 ตัวแปร คือ para1 และ para2 โดยในตัวแปรได้นำค่าทั้ง 2 ไปบวกกัน และเก็บค่าที่ได้ไว้ที่ตัวแปร var1 จากนั้นได้ส่งค่า var1 กลับคืนออกมาจากฟังก์ชัน

  • การเรียกใช้ฟังก์ชันสามารถทำได้โดย
add_num = function_add(3,5)
print(add_num)

หรือ

print(function_add(3,5))

ผลลัพธ์ที่ได้คือ

8

ฟังก์ชันเพื่อใช้สำหรับการตรวจสอบสถานะของ Server

ฟังก์ชันที่จะสร้างประกอบด้วย 4 ฟังก์ชันคือ

  • total_memory เพื่อใช้แสดงหน่วยความจำทั้งหมด
  • used_memory เพื่อให้แสดงหน่วยความจำที่ถูกใช้ไป
  • running_process เพื่อแสดงจำนวนโพรเซสที่กำลังทำงาน
  • up_time เพื่อแสดงเวลาทั้งหมดที่เปิดเครื่องเซิร์ฟเวอร์

ฟังก์ชัน total_memory

def total_memory():
    total_mem = subprocess.Popen("free -m | grep 'Mem' | awk '{print $2}'", shell=True, stdout=subprocess.PIPE)
    total_mem = int(total_mem.stdout.read())/1024

    return total_mem    

ฟังก์ชัน used_memory

def used_memory():
    used_mem = subprocess.Popen("free -m | grep Mem | awk '{print $3}'", shell=True, stdout=subprocess.PIPE)
    used_mem = int(used_mem.stdout.read())/1024

    return used_mem  

ฟังก์ชัน running_process

def running_process():
    run_process = subprocess.Popen("ps aux | wc -l", shell=True, stdout=subprocess.PIPE)
    run_process = run_process.stdout.read()

    return run_process 

ฟังก์ชัน up_time

def up_time():
    up_t = subprocess.Popen("uptime", shell=True, stdout=subprocess.PIPE)
    up_t = up_t.stdout.read()
    up_t = map(str.strip, up_t.split(','))
    up_t = '-'.join(up_t)

    return up_t

ส่วนของโปรแกรมหลัก

เมื่อได้สร้างฟังก์ชันเป็นที่เรียบร้อย จากนั้นจะเขียนโปรแกรมเพื่อให้โปรแกรมสามารถไปเรื่อย ๆ จนกว่าจะสั่งให้หยุดการทำงาน สามารถทำได้โดยใช้ คำสั่ง while ดังต่อไปนี้

import time

while(True):
    print("Total memory: ", total_memory())
    print("Used memory: ", used_memory())
    print("Running process: ", running_process())
    print("Uptime: ", up_time())

    time.sleep(3)

ในคำสั่ง while ได้ตรวจสอบเงื่อนไขคือ True นั่นแสดงว่า While จะมีค่าเป็นจริงเสมอ จึงส่งผลให้โปรแกรมวนลูป (Loop) ตลอด และจะหยุดทำงานทุก ๆ 3 วินาที โดยใช้คำสั่ง time.sleep(3)

ตัวอย่างโปรแกรมสมบูรณ์

#------------status_server.py----------------
import subprocess
import time

def total_memory():
        total_mem = subprocess.Popen("free -m | grep Mem | awk '{print $2}'", shell=True, stdout=subprocess.PIPE)
        total_mem = int(total_mem.stdout.read())/1024

        return total_mem

def used_memory():
        used_mem = subprocess.Popen("free -m | grep Mem | awk '{print $3}'", shell=True, stdout=subprocess.PIPE)
        used_mem = int(used_mem.stdout.read())/1024

        return used_mem


def running_process():
        run_process = subprocess.Popen("ps aux | wc -l", shell=True, stdout=subprocess.PIPE)
        run_process = run_process.stdout.read()

        return run_process

def up_time():
        up_t = subprocess.Popen("uptime", shell=True, stdout=subprocess.PIPE)
        up_t = up_t.stdout.read()
        up_t = map(str.strip, up_t.split(','))
        up_t = '-'.join(up_t)

        return up_t

while(True):
    print("Total memory: ", total_memory())
    print("Used memory: ", used_memory())
    print("Running process: ", running_process())
    print("Uptime: ", up_time())

    time.sleep(3)

การสั่งให้โปรแกรมทำงานสามารถทำได้โดยเปิด Terminal และพิมพ์คำสั่งดังต่อไปนี้

$ python status_server.py

ผลลัพธ์ที่ได้คือ

('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '243\n')
('Uptime: ', '14:20:11 up 3 days-18:06-4 users-load average: 0.34-0.41-0.49')
('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '243\n')
('Uptime: ', '14:20:14 up 3 days-18:06-4 users-load average: 0.34-0.41-0.49')
('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '243\n')
('Uptime: ', '14:20:17 up 3 days-18:06-4 users-load average: 0.31-0.41-0.49')
('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '244\n')
('Uptime: ', '14:20:20 up 3 days-18:06-4 users-load average: 0.31-0.41-0.49')