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

Newest version

parent 1f49a832
...@@ -7,50 +7,69 @@ import time ...@@ -7,50 +7,69 @@ import time
import sys import sys
import libvirt import libvirt
import config import config
import threading
from datetime import datetime, date
TCP_IP = '192.168.123.174'
TCP_PORT = 9001 TCP_PORT = 9001
BUFFER_SIZE = 1024 BUFFER_SIZE = 1024
request = '3,50'
server_index = 0
# server_ips = ['192.168.123.174'] # server_ips = ['192.168.123.174']
server_ips = config.new_server_ips server_ips = config.new_server_ips
def send_request(request, server_index): def send_request(request, server_index):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
try :
s.connect((server_ips[server_index], TCP_PORT)) s.connect((server_ips[server_index], TCP_PORT))
s.send(request.encode('ascii')) s.send(request.encode('ascii'))
data = s.recv(BUFFER_SIZE) data = s.recv(BUFFER_SIZE)
s.close() s.close()
except :
print('Response not received. Server {} offline.'.format(server_index + 1))
data = b''
return data 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 i = 0
print("Starting with low load...")
while(True) : while(True) :
if(i < 10): if(i < 10) :
l = [request] * 100 l = [request] * 125
elif(i == 10) :
print("Shifting to high load...")
l = [request] * 250
else : else :
l = [request] * 200 l = [request] * 250
server_index = (server_index + 1) % len(server_ips) server_index = (server_index + 1) % len(server_ips)
f = open('server_ips.txt', 'r') f = open('server_ips.txt', 'r')
server_ips = [line.strip() for line in f.readlines()] server_ips = [line.strip() for line in f.readlines()]
# print(config.new_server_ips) # print(config.new_server_ips)
# print(server_ips) # print(server_ips)
print(server_index) # print(server_index)
# for lease in conn.networkLookupByName("default").DHCPLeases(): start_time = datetime.now()
# if lease['ipaddr'] not in server_ips:
# server_ips.append(lease['ipaddr'])
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor: with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
req_sender = [executor.submit(send_request, request, server_index) for request in l] req_sender = [executor.submit(send_request, request, server_index) for request in l]
for future in concurrent.futures.as_completed(req_sender): for future in concurrent.futures.as_completed(req_sender):
data = future.result() data = future.result()
# print(data) # 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 i += 1
time.sleep(0.5) time.sleep(0.5)
\ No newline at end of file
...@@ -19,63 +19,69 @@ f1 = open('server_ips.txt', 'w') ...@@ -19,63 +19,69 @@ f1 = open('server_ips.txt', 'w')
f1.write(config.new_server_ips[0]) f1.write(config.new_server_ips[0])
f1.close() f1.close()
def establish_conn(server_ip, port): def establish_conn(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10) sock.settimeout(10)
print("Trying to establish connection with replica server...")
while(True): while(True):
try: try:
sock.connect((server_ip, port)) sock.connect((config.new_server_ips[-1], port))
break break
# except socket.gaierror, e:
# print "Address-related error connecting to server: %s" % e
# sys.exit(1)
except socket.error: except socket.error:
print("Connection error: {}".format(socket.error)) pass
print("Connection established...") # print("Connection error: {}".format(socket.error))
print("Replica server is now online and accepting requests...")
sock.settimeout(None) sock.settimeout(None)
sock.close() sock.close()
print("Monitor program started running...") print("Monitor program started running...")
ind = 0 ind = 0
N = 5
t1 = threading.Thread(target = establish_conn, args = (9001,))
flag = False
while(True): while(True):
N = 10
cpu_time1 = 0
cpu_time2 = 0
cpu_stats1 = dom.getCPUStats(True) cpu_stats1 = dom.getCPUStats(True)
for (i, cpu) in enumerate(cpu_stats1): for (i, cpu) in enumerate(cpu_stats1):
cpu_time1 = cpu['cpu_time'] / 1000000000. cpu_time1 = cpu['cpu_time'] / 1000000000 - cpu['system_time'] / 1000000000 - cpu['user_time'] / 1000000000
# print('CPU '+str(i)+' Time: '+str(cpu['cpu_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) time.sleep(N)
cpu_stats2 = dom.getCPUStats(True) cpu_stats2 = dom.getCPUStats(True)
for (i, cpu) in enumerate(cpu_stats2): for (i, cpu) in enumerate(cpu_stats2):
cpu_time2 = cpu['cpu_time'] / 1000000000. cpu_time2 = cpu['cpu_time'] / 1000000000 - cpu['system_time'] / 1000000000 - cpu['user_time'] / 1000000000
# print('CPU '+str(i)+' Time: '+str(cpu['cpu_time'] / 1000000000.)) if(flag == True) :
cpu_usage = 100 * (cpu_time2 - cpu_time1) / N cpu_stats4 = dom1.getCPUStats(True)
print(cpu_usage) for(i, cpu) in enumerate(cpu_stats4):
if(cpu_usage > 60.0): 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') print('Overload detected')
dom1 = conn.lookupByName('server2') dom1 = conn.lookupByName('server2')
flag = dom1.isActive() flag = dom1.isActive()
f = open('server2.xml', 'r') f = open('server2.xml', 'r')
xmlconfig = " ".join(f.readlines()) xmlconfig = " ".join(f.readlines())
ind += 1 ind += 1
# print(xmlconfig)
# t1 = None
if(flag == False): if(flag == False):
dom1 = conn.defineXML(xmlconfig) dom1 = conn.defineXML(xmlconfig)
if dom1 == None: 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) exit(1)
if dom1.create() < 0: 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) exit(1)
print('Guest ' + dom1.name() + ' has booted', file = sys.stderr) print('Replica server has booted', file = sys.stderr)
# while(dom1.isActive() == False):
# continue
for lease in conn.networkLookupByName("default").DHCPLeases(): for lease in conn.networkLookupByName("default").DHCPLeases():
if lease['ipaddr'] not in config.new_server_ips: if lease['ipaddr'] not in config.new_server_ips:
config.new_server_ips.append(lease['ipaddr']) config.new_server_ips.append(lease['ipaddr'])
t1 = threading.Thread(target = establish_conn, args = (lease['ipaddr'], 9001))
t1.start() t1.start()
else : else :
if((dom1.isActive() == True) and (ind >= 3)): if((dom1.isActive() == True) and (ind >= 3)):
...@@ -84,7 +90,7 @@ while(True): ...@@ -84,7 +90,7 @@ while(True):
for i in range(len(config.new_server_ips)): for i in range(len(config.new_server_ips)):
f1.write(config.new_server_ips[i] + '\n') f1.write(config.new_server_ips[i] + '\n')
f1.close() f1.close()
print(config.new_server_ips) # print(config.new_server_ips)
conn.close() conn.close()
exit(0) 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