Mencoba xmlrpc (Python 3)

Bismillahirrahmanirrahim.

[TL;DR]

Beberapa waktu yang lalu saya mendapatkan tugas untuk membuat sebuah program ping server sederhana menggunakan bahasa pemrograman Python. Nanti ada dua program yang berjalan, satu berada di sisi server dan satu lagi berada di sisi klien.

Si server bertugas memberitahukan informasi pemakaian harddisk server kepada si klien. Informasi tersebut  dikemas dalam bentuk JSON. Untuk si klien, ia bertugas melakukan ping ke server dan jika server sedang UP, maka klien akan meminta informasi pemakaian harddisk si server. Komunikasi antara server dan klien memanfaatkan RPC.

[Screenshot Percobaan]

lovorus-client-1 [Running] - Oracle VM VirtualBox_003
lovorus-client-1 melakukan ping dan menampilkan informasi dari server
lovorus-client-2 [Running] - Oracle VM VirtualBox_004
lovorus-client-2 melakukan ping dan menampilkan informasi dari server
lovorus-server [Running] - Oracle VM VirtualBox_002
lovorus-server menampilkan informasi terkait permintaan klien
lovorus-client-2 [Running] - Oracle VM VirtualBox_007
lovorus-client-2 mencoba ping saat lovorus-server (10.10.10.5) sedang DOWN

Selection_006
lovorus-server sedang DOWN

[Kode Sumber Program]

Berikut adalah kode program yang akan berjalan di sisi server

from xmlrpc.server import SimpleXMLRPCServer
from shutil import disk_usage
from json import dumps
kilo_bytes = 1024
mega_bytes = 1024 * 1024
giga_bytes = 1024 * 1024 * 1024
def send_to_client():
(total, used, free) = disk_usage ("/")
server_disk_usage = {
"Total" : {
"kB" : float(total)/kilo_bytes,
"MB" : float(total)/mega_bytes,
"GB" : float(total)/giga_bytes
},
"Used" : {
"kB" : float(used)/kilo_bytes,
"MB" : float(used)/mega_bytes,
"GB" : float(used)/giga_bytes
},
"Free" : {
"kB" : float(free)/kilo_bytes,
"MB" : float(free)/mega_bytes,
"GB" : float(free)/giga_bytes
}
}
return dumps(server_disk_usage)
def main():
server = SimpleXMLRPCServer(("", 13000))
server.register_function(send_to_client,"server_disk_usage")
server.serve_forever()
if __name__ == '__main__':
main()

Berikut adalah kode program yang akan berjalan di sisi klien

from json import loads
from xmlrpc.client import ServerProxy
from os import system
from sys import argv
def ping_server(server_addr):
print("Checking the server status...")
status = system("ping -c 1 -w 5 " + server_addr + " > /dev/null 2>&1")
if status == 0:
return ("Up", server_addr)
else:
return ("Down", server_addr)
def print_info_disk(info, data_disk):
for i in info:
print("%s\t\t\t: %.2f kB\t\t%.2f MB\t%.2f GB" \
% (i, data_disk[i]['kB'], data_disk[i]['MB'], data_disk[i]['GB']))
def main(server_addr):
server = ServerProxy("http://" + server_addr + ":13000/", allow_none=True)
(status_server, addr) = ping_server(server_addr)
print("%s status\t: %s" % (addr, status_server))
if status_server == "Up":
try:
data_disk = loads(server.server_disk_usage())
print_info_disk(["Total", "Used", "Free"], data_disk)
except ConnectionRefusedError:
print("Can't connect to lovorus-server.py on the server")
if __name__ == '__main__':
if len(argv) == 2:
main(argv[1])
else:
print("Need an IP address")

5 thoughts on “Mencoba xmlrpc (Python 3)”

  1. >>> from shutil import disk_usage
    Traceback (most recent call last):
    File “”, line 1,
    ImportError: cannot import name disk_usage
    >>>

    Like

Leave a comment