Skip to content

Commit

Permalink
Added sliders for switching NIC state. Also added post-restart sync w…
Browse files Browse the repository at this point in the history
…ith interface listing in vmanager, so interfaces now correctly show which type they are. Also added special case columns on table() so that custom elements can be injected into particular columns.
  • Loading branch information
Torxed committed Jan 20, 2020
1 parent 993fc84 commit 4cd8384
Show file tree
Hide file tree
Showing 9 changed files with 324 additions and 15 deletions.
55 changes: 55 additions & 0 deletions api_modules/interface.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import json
from os.path import isdir, isfile

def get_overview():
response = {'vnics' : {}, 'interfaces' : {}, 'routers' : {}, 'switches' : {}}
for nic_name in vmanager.nics:
response['vnics'][nic_name] = {
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
}

for nic_name in vmanager.interfaces:
response['interfaces'][nic_name] = vmanager.interfaces[nic_name]

for nic_name in vmanager.routers:
response['routers'][nic_name] = vmanager.routers[nic_name]

for nic_name in vmanager.switches:
response['switches'][nic_name] = vmanager.switches[nic_name]

return response

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### nic ###\n', data, client)

if 'state' in data and 'target' in data:
if data['target'] in vmanager.nics:
if data['state']:
vmanager.nics[data['target']].up()
else:
vmanager.nics[data['target']].down()
elif data['target'] in vmanager.interfaces:
if data['state']:
vmanager.interfaces[data['target']].up()
else:
vmanager.interfaces[data['target']].down()
elif data['target'] in vmanager.routers:
if data['state']:
vmanager.routers[data['target']].up()
else:
vmanager.routers[data['target']].down()
elif data['target'] in vmanager.switches:
if data['state']:
vmanager.switches[data['target']].up()
else:
vmanager.switches[data['target']].down()
else:
print(f'[N] Could not locate {data["target"]}')

return get_overview()
27 changes: 26 additions & 1 deletion api_modules/router.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,34 @@
import json
from os.path import isdir, isfile

def get_overview():
response = {'vnics' : {}, 'interfaces' : {}, 'routers' : {}, 'switches' : {}}
for nic_name in vmanager.nics:
response['vnics'][nic_name] = {
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
}

for nic_name in vmanager.interfaces:
response['interfaces'][nic_name] = vmanager.interfaces[nic_name]

for nic_name in vmanager.routers:
response['routers'][nic_name] = vmanager.routers[nic_name]

for nic_name in vmanager.switches:
response['switches'][nic_name] = vmanager.switches[nic_name]

return response

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### router ###\n', data, client)

if 'new' in data:
vmanager.Router(trunk=data['new']['trunk'], ifname=data['new']['name'])
vmanager.Router(trunk=data['new']['trunk'], ifname=data['new']['name'])

return get_overview()
27 changes: 26 additions & 1 deletion api_modules/switch.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,34 @@
import json
from os.path import isdir, isfile

def get_overview():
response = {'vnics' : {}, 'interfaces' : {}, 'routers' : {}, 'switches' : {}}
for nic_name in vmanager.nics:
response['vnics'][nic_name] = {
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
}

for nic_name in vmanager.interfaces:
response['interfaces'][nic_name] = vmanager.interfaces[nic_name]

for nic_name in vmanager.routers:
response['routers'][nic_name] = vmanager.routers[nic_name]

for nic_name in vmanager.switches:
response['switches'][nic_name] = vmanager.switches[nic_name]

return response

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### switch ###\n', data, client)

if 'new' in data:
vmanager.Switch(data['new']['name'])
vmanager.Switch(data['new']['name'])

return get_overview()
27 changes: 26 additions & 1 deletion api_modules/virtualnic.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,34 @@
import json
from os.path import isdir, isfile

def get_overview():
response = {'vnics' : {}, 'interfaces' : {}, 'routers' : {}, 'switches' : {}}
for nic_name in vmanager.nics:
response['vnics'][nic_name] = {
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
}

for nic_name in vmanager.interfaces:
response['interfaces'][nic_name] = vmanager.interfaces[nic_name]

for nic_name in vmanager.routers:
response['routers'][nic_name] = vmanager.routers[nic_name]

for nic_name in vmanager.switches:
response['switches'][nic_name] = vmanager.switches[nic_name]

return response

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### nic ###\n', data, client)

if 'new' in data:
vmanager.VirtualNic(data['new']['name'])
vmanager.VirtualNic(data['new']['name'])

return get_overview()
1 change: 1 addition & 0 deletions web_root/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<title>Vmanager GUI</title>
<link rel="stylesheet" type="text/css" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/slider.css">
<link rel="stylesheet" type="text/css" href="/vmanager-gui.css">
<script type="text/javascript">
let socket = null;
Expand Down
45 changes: 45 additions & 0 deletions web_root/slider.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
.onoffswitch {
position: relative; width: 90px;
-webkit-user-select:none; -moz-user-select:none; -ms-user-select: none;
}
.onoffswitch-checkbox {
display: none;
}
.onoffswitch-label {
display: block; overflow: hidden; cursor: pointer;
border: 2px solid #999999; border-radius: 20px;
}
.onoffswitch-inner {
display: block; width: 200%; margin-left: -100%;
transition: margin 0.3s ease-in 0s;
}
.onoffswitch-inner:before, .onoffswitch-inner:after {
display: block; float: left; width: 50%; height: 30px; padding: 0; line-height: 30px;
font-size: 14px; color: white; font-family: Trebuchet, Arial, sans-serif; font-weight: bold;
box-sizing: border-box;
}
.onoffswitch-inner:before {
content: "Up";
padding-left: 10px;
background-color: #34A7C1; color: #FFFFFF;
}
.onoffswitch-inner:after {
content: "Down";
padding-right: 10px;
background-color: #EEEEEE; color: #999999;
text-align: right;
}
.onoffswitch-switch {
display: block; width: 18px; margin: 6px;
background: #FFFFFF;
position: absolute; top: 0; bottom: 0;
right: 56px;
border: 2px solid #999999; border-radius: 20px;
transition: all 0.3s ease-in 0s;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
margin-left: 0;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
right: 0px;
}
6 changes: 5 additions & 1 deletion web_root/vmanager-gui.css
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ h3 {
.submenu > .button:hover {
color: var(--g_primary);
background-color: #FFFFFF;

}

.container > .header > .menu > .button:hover {
Expand Down Expand Up @@ -192,6 +191,11 @@ td.column {
tr:nth-child(even) {background: var(--light)}
tr:nth-child(odd) {background: var(--backdrop_light)}

option.bold {
font-weight: bold;
color: var(--o_primary);
}

.popup {
position: absolute;
left: 50%;
Expand Down
Loading

0 comments on commit 4cd8384

Please sign in to comment.