Commit 143a4f6f authored by Nilesh Jagdish's avatar Nilesh Jagdish

Newest version

parent 1f49a832
......@@ -7,50 +7,69 @@ import time
import sys
import libvirt
import config
import threading
from datetime import datetime, date
TCP_IP = '192.168.123.174'
TCP_PORT = 9001
BUFFER_SIZE = 1024
request = '3,50'
server_index = 0
# server_ips = ['192.168.123.174']
server_ips = config.new_server_ips
def send_request(request, server_index):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server_ips[server_index], TCP_PORT))
s.send(request.encode('ascii'))
data = s.recv(BUFFER_SIZE)
s.close()
s.settimeout(5)
try :
s.connect((server_ips[server_index], TCP_PORT))
s.send(request.encode('ascii'))
data = s.recv(BUFFER_SIZE)
s.close()
except :
print('Response not received. Server {} offline.'.format(server_index + 1))
data = b''
return data
request = '3,50'
server_index = 0
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
i = 0
print("Starting with low load...")
while(True) :
if(i < 10):
l = [request] * 100
if(i < 10) :
l = [request] * 125
elif(i == 10) :
print("Shifting to high load...")
l = [request] * 250
else :
l = [request] * 200
l = [request] * 250
server_index = (server_index + 1) % len(server_ips)
f = open('server_ips.txt', 'r')
server_ips = [line.strip() for line in f.readlines()]
# print(config.new_server_ips)
# print(server_ips)
print(server_index)
# for lease in conn.networkLookupByName("default").DHCPLeases():
# if lease['ipaddr'] not in server_ips:
# server_ips.append(lease['ipaddr'])
# print(server_index)
start_time = datetime.now()
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
req_sender = [executor.submit(send_request, request, server_index) for request in l]
for future in concurrent.futures.as_completed(req_sender):
data = future.result()
# print(data)
end_time = datetime.now()
if(i < 10) :
try :
c = end_time - start_time
milliseconds = (c.days * 24 * 60 * 60 + c.seconds) * 1000 + c.microseconds / 1000.0
throughput = 125.0 / milliseconds
except :
throughput = 0.0
print('Throughput of server {} : {}'.format(server_index + 1, throughput))
else :
try :
c = end_time - start_time
milliseconds = (c.days * 24 * 60 * 60 + c.seconds) * 1000 + c.microseconds / 1000.0
throughput = 250.0 / milliseconds
except :
throughput = 0.0
print('Throughput of server {} : {}'.format(server_index + 1, throughput))
i += 1
time.sleep(0.5)
\ No newline at end of file
......@@ -19,63 +19,69 @@ f1 = open('server_ips.txt', 'w')
f1.write(config.new_server_ips[0])
f1.close()
def establish_conn(server_ip, port):
def establish_conn(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
print("Trying to establish connection with replica server...")
while(True):
try:
sock.connect((server_ip, port))
sock.connect((config.new_server_ips[-1], port))
break
# except socket.gaierror, e:
# print "Address-related error connecting to server: %s" % e
# sys.exit(1)
except socket.error:
print("Connection error: {}".format(socket.error))
print("Connection established...")
pass
# print("Connection error: {}".format(socket.error))
print("Replica server is now online and accepting requests...")
sock.settimeout(None)
sock.close()
print("Monitor program started running...")
ind = 0
N = 5
t1 = threading.Thread(target = establish_conn, args = (9001,))
flag = False
while(True):
N = 10
cpu_time1 = 0
cpu_time2 = 0
cpu_stats1 = dom.getCPUStats(True)
for (i, cpu) in enumerate(cpu_stats1):
cpu_time1 = cpu['cpu_time'] / 1000000000.
# print('CPU '+str(i)+' Time: '+str(cpu['cpu_time'] / 1000000000.))
cpu_time1 = cpu['cpu_time'] / 1000000000 - cpu['system_time'] / 1000000000 - cpu['user_time'] / 1000000000
if(flag == True):
cpu_stats3 = dom1.getCPUStats(True)
for (i, cpu) in enumerate(cpu_stats3):
cpu_time3 = cpu['cpu_time'] / 1000000000 - cpu['system_time'] / 1000000000 - cpu['user_time'] / 1000000000
time.sleep(N)
cpu_stats2 = dom.getCPUStats(True)
for (i, cpu) in enumerate(cpu_stats2):
cpu_time2 = cpu['cpu_time'] / 1000000000.
# print('CPU '+str(i)+' Time: '+str(cpu['cpu_time'] / 1000000000.))
cpu_usage = 100 * (cpu_time2 - cpu_time1) / N
print(cpu_usage)
if(cpu_usage > 60.0):
cpu_time2 = cpu['cpu_time'] / 1000000000 - cpu['system_time'] / 1000000000 - cpu['user_time'] / 1000000000
if(flag == True) :
cpu_stats4 = dom1.getCPUStats(True)
for(i, cpu) in enumerate(cpu_stats4):
cpu_time4 = cpu['cpu_time'] / 1000000000 - cpu['system_time'] / 1000000000 - cpu['user_time'] / 1000000000
cpu_usage1 = 100 * (cpu_time2 - cpu_time1) / N
print('CPU Usage of Server 1 : {}'.format(cpu_usage1))
if(flag == True) :
cpu_usage2 = 100 * (cpu_time4 - cpu_time3) / N
print('CPU Usage of Server 2 : {}'.format(cpu_usage2))
print('-------------------------------------------------------------')
if(cpu_usage1 > 60.0):
print('Overload detected')
dom1 = conn.lookupByName('server2')
flag = dom1.isActive()
f = open('server2.xml', 'r')
xmlconfig = " ".join(f.readlines())
ind += 1
# print(xmlconfig)
# t1 = None
if(flag == False):
dom1 = conn.defineXML(xmlconfig)
if dom1 == None:
print('Failed to define a domain from an XML definition.', file=sys.stderr)
print('Failed to define a domain from an XML definition', file=sys.stderr)
exit(1)
if dom1.create() < 0:
print('Can not boot guest domain.', file = sys.stderr)
print('Unable to boot replica guest server', file = sys.stderr)
exit(1)
print('Guest ' + dom1.name() + ' has booted', file = sys.stderr)
# while(dom1.isActive() == False):
# continue
print('Replica server has booted', file = sys.stderr)
for lease in conn.networkLookupByName("default").DHCPLeases():
if lease['ipaddr'] not in config.new_server_ips:
config.new_server_ips.append(lease['ipaddr'])
t1 = threading.Thread(target = establish_conn, args = (lease['ipaddr'], 9001))
t1.start()
else :
if((dom1.isActive() == True) and (ind >= 3)):
......@@ -84,7 +90,7 @@ while(True):
for i in range(len(config.new_server_ips)):
f1.write(config.new_server_ips[i] + '\n')
f1.close()
print(config.new_server_ips)
# print(config.new_server_ips)
conn.close()
exit(0)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment