102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
|
# -*- 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()
|