agent/SWSCloudNode/common.py

102 lines
2.9 KiB
Python
Raw Normal View History

2016-05-07 18:29:28 +03:00
# -*- coding: utf-8 -*-
import datetime
import json
import os
import sys
# for network
import socket
import fcntl
import struct
import array
import urllib
class Common:
def load_config(self):
self.settings_node = self.settings_node()
self.settings_vm = self.settings_vm()
def time(self):
"""
используется для вывода времени на экран в консоли
"""
return str(datetime.datetime.now())
def error(self, code):
"""
вывод ошибки по error.id
"""
if code == 1:
message = "Invalid JSON-RPC. Unknown RPC version"
print self.time() + " - " + message
return {"error": {"code": code, "message": message}}
def settings_node(self):
"""
конфигурация ноды
"""
if os.path.isfile('/etc/gocloud/node/node.json'):
with open('/etc/gocloud/node/node.json') as nodesettings_file:
conf = json.load(nodesettings_file)
else:
print "[Errno 2] No such file or directory: '/etc/gocloud/node/node.json'"
sys.exit(2)
return conf
def settings_vm(self):
"""
конфигурационные параметры для виртуальных машин
"""
if os.path.isfile('/etc/gocloud/node/vmsettings.json'):
with open('/etc/gocloud/node/vmsettings.json') as vmsettings_file:
conf = json.load(vmsettings_file)
else:
print "[Errno 2] No such file or directory: '/etc/gocloud/node/vmsettings.json'"
sys.exit(2)
return conf
def linux_distribution(self):
try:
return platform.linux_distribution()
except:
return 0
# network
def all_interfaces(self):
# arbitrary. raise if needed.
max_possible = 128
bytes = max_possible * 32
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
names = array.array('B', '\0' * bytes)
outbytes = struct.unpack('iL', fcntl.ioctl(
s.fileno(),
0x8912, # SIOCGIFCONF
struct.pack('iL', bytes, names.buffer_info()[0])
))[0]
namestr = names.tostring()
lst = []
for i in range(0, outbytes, 40):
name = namestr[i:i+16].split('\0', 1)[0]
ip = namestr[i+20:i+24]
lst.append((name, ip))
return lst
def format_ip(self, addr):
return str(ord(addr[0])) + '.' + str(ord(addr[1])) + '.' + str(ord(addr[2])) + '.' + str(ord(addr[3]))
def check_file_exists(self, filename):
if os.path.isfile(filename):
return True
else:
return False
def server_request(self, server_url, request):
params = {
"request": json.dumps(request)
}
return urllib.urlopen(server_url, urllib.urlencode(params)).read()