add remove bot and client

This commit is contained in:
Brian Martin 2020-01-03 01:33:31 -05:00
parent 80c412afd1
commit 63e0620f0c
5 changed files with 76 additions and 25 deletions

View file

@ -59,6 +59,8 @@ class ConfServer:
[ [
web.get("", self.handle_base), web.get("", self.handle_base),
web.get("/bot/remove/{did}", self.handle_RemoveBot, name='remove-bot'),
web.get("/client/remove/{resource}", self.handle_RemoveClient, name='remove-client'),
web.get("/restart_{service}", self.handle_RestartService, name='restart-service'), web.get("/restart_{service}", self.handle_RestartService, name='restart-service'),
web.get( web.get(
"/{apiversion}/private/{country}/{language}/{devid}/{apptype}/{appversion}/{devtype}/{aid}/user/login", "/{apiversion}/private/{country}/{language}/{devid}/{apptype}/{appversion}/{devtype}/{aid}/user/login",
@ -381,6 +383,32 @@ class ConfServer:
confserverlog.exception("{}".format(e)) confserverlog.exception("{}".format(e))
pass pass
async def handle_RemoveBot(self, request):
try:
did = request.match_info.get("did", "")
bumper.bot_remove(did)
if bumper.bot_get(did):
return web.json_response({"status": "failed to remove bot"})
else:
return web.json_response({"status": "successfully removed bot"})
except Exception as e:
confserverlog.exception("{}".format(e))
pass
async def handle_RemoveClient(self, request):
try:
resource = request.match_info.get("resource", "")
bumper.client_remove(resource)
if bumper.client_get(resource):
return web.json_response({"status": "failed to remove client"})
else:
return web.json_response({"status": "successfully removed client"})
except Exception as e:
confserverlog.exception("{}".format(e))
pass
async def handle_login(self, request): async def handle_login(self, request):
try: try:
user_devid = request.match_info.get("devid", "") user_devid = request.match_info.get("devid", "")

View file

@ -286,7 +286,8 @@ def bot_add(sn, did, devclass, resource, company):
def bot_remove(did): def bot_remove(did):
bots = db_get().table("bots") bots = db_get().table("bots")
bot = bot_get(did) bot = bot_get(did)
bots.remove(doc_ids=[bot.doc_id]) if bot:
bots.remove(doc_ids=[bot.doc_id])
def bot_get(did): def bot_get(did):
@ -344,6 +345,11 @@ def client_add(userid, realm, resource):
bumperlog.info("Adding new client with resource {}".format(newclient.resource)) bumperlog.info("Adding new client with resource {}".format(newclient.resource))
client_full_upsert(newclient.asdict()) client_full_upsert(newclient.asdict())
def client_remove(resource):
clients = db_get().table("clients")
client = client_get(resource)
if client:
clients.remove(doc_ids=[client.doc_id])
def client_get(resource): def client_get(resource):
clients = db_get().table("clients") clients = db_get().table("clients")

View file

@ -5,41 +5,43 @@
<title>Bumper</title> <title>Bumper</title>
<meta http-equiv="refresh" content="5" /> <meta http-equiv="refresh" content="5" />
<script> <script>
function restartHelperbot() { function restartService(service) {
console.log("restart helperbot"); console.log("restart service", service);
fetch('restart_Helperbot') fetch('restart_' + service)
.then((response) => { .then((response) => {
return response.json(); return response.json();
}) })
.then((myJson) => { .then((myJson) => {
alert("Restarting Helperbot: " + myJson["status"]) alert("Restarting " + service + ": " + myJson["status"])
console.log("restart helperbot - " + myJson["status"]); console.log("restart",service,"-",myJson["status"]);
}); });
} }
function restartMQTTServer() { function removeBot(did) {
console.log("restart mqtt server"); console.log("remove bot",did);
fetch('restart_MQTTServer') fetch('bot/remove/' + did)
.then((response) => { .then((response) => {
return response.json(); return response.json();
}) })
.then((myJson) => { .then((myJson) => {
alert("Restarting MQTT Server: " + myJson["status"]) alert("Removing Bot (DID) - " + did + " - " + myJson["status"])
console.log("restart mqtt server - " + myJson["status"]); console.log("remove bot",did, myJson["status"]);
}); });
} }
function restartXMPPServer() {
console.log("restart xmpp server"); function removeClient(resource) {
fetch('restart_XMPPServer')
console.log("remove client",resource);
fetch('client/remove/' + resource)
.then((response) => { .then((response) => {
return response.json(); return response.json();
}) })
.then((myJson) => { .then((myJson) => {
alert("Restarting XMPP Server: " + myJson["status"]) alert("Removing Client - resource - " + resource + " - " + myJson["status"])
console.log("restart xmpp server - " + myJson["status"]); console.log("remove client",resource, myJson["status"]);
}); });
} }
@ -66,7 +68,7 @@
<div class="card border border-dark"> <div class="card border border-dark">
<div class="card card-header"> <div class="card card-header">
<h3 class="card-title">MQTT Server</h3> <h3 class="card-title">MQTT Server</h3>
<div>Action: <button type="button" class="btn btn-outline-danger btn-sm" onclick="restartMQTTServer();">Restart Service</button></div> <div>Action: <button type="button" class="btn btn-outline-danger btn-sm" onclick="restartService('MQTTServer');">Restart Service</button></div>
</div> </div>
<div class="card-body"> <div class="card-body">
Status: {% if mqtt_server[0].state == "started" %} <span class="badge badge-success">{{ mqtt_server[0].state }}</span> {% else %} <span class="badge badge-danger">{{ mqtt_server[0].state }}</span> {% endif %} Status: {% if mqtt_server[0].state == "started" %} <span class="badge badge-success">{{ mqtt_server[0].state }}</span> {% else %} <span class="badge badge-danger">{{ mqtt_server[0].state }}</span> {% endif %}
@ -93,7 +95,7 @@
<div class="card border border-dark"> <div class="card border border-dark">
<div class="card card-header"> <div class="card card-header">
<h3 class="card-title">XMPP Server</h3> <h3 class="card-title">XMPP Server</h3>
<div>Action: <button type="button" class="btn btn-outline-danger btn-sm" onclick="restartXMPPServer();">Restart Service</button></div> <div>Action: <button type="button" class="btn btn-outline-danger btn-sm" onclick="restartService('XMPPServer');">Restart Service</button></div>
</div> </div>
<div class="card-body"> <div class="card-body">
Status: {% if xmpp_server.server._serving == True %} <span class="badge badge-success">running</span> {% else %} <span class="badge badge-danger">not running</span> {% endif %} Status: {% if xmpp_server.server._serving == True %} <span class="badge badge-success">running</span> {% else %} <span class="badge badge-danger">not running</span> {% endif %}
@ -120,7 +122,7 @@
<div class="card border border-dark"> <div class="card border border-dark">
<div class="card card-header"> <div class="card card-header">
<h3 class="card-title">Helperbot</h3> <h3 class="card-title">Helperbot</h3>
<div>Action: <button type="button" class="btn btn-outline-danger btn-sm" onclick="restartHelperbot();">Restart Service</button></div> <div>Action: <button type="button" class="btn btn-outline-danger btn-sm" onclick="restartService('Helperbot');">Restart Service</button></div>
</div> </div>
@ -143,7 +145,7 @@
<div class="card-body"> <div class="card-body">
<table class="table table-striped table-bordered table-responsive-lg"> <table class="table table-striped table-bordered table-responsive-lg">
<thead class="thead-dark"> <thead class="thead-dark">
<TH>SN</TH><TH>Nickname</TH><TH>Class</TH><TH>DID</TH><TH>Resource</TH><TH>Company</TH><TH>MQTT Connected</TH><TH>XMPP Connected</TH> <TH>SN</TH><TH>Nickname</TH><TH>Class</TH><TH>DID</TH><TH>Resource</TH><TH>Company</TH><TH>MQTT Connected</TH><TH>XMPP Connected</TH><TH>Action</TH>
</thead> </thead>
{% for bot in bots %} {% for bot in bots %}
<TR> <TR>
@ -156,6 +158,7 @@
<TD {% if bot.mqtt_connection == True %} class="table-success" {% endif %}> {{ bot.mqtt_connection }} </TD> <TD {% if bot.mqtt_connection == True %} class="table-success" {% endif %}> {{ bot.mqtt_connection }} </TD>
<TD {% if bot.xmpp_connection == True %} class="table-success" {% endif %}> {{ bot.xmpp_connection }}</TD> <TD {% if bot.xmpp_connection == True %} class="table-success" {% endif %}> {{ bot.xmpp_connection }}</TD>
<TD> <button type="button" class="btn btn-outline-danger btn-sm" onclick="removeBot('{{ bot.did }}');">Remove</button> </TD>
</TR> </TR>
{% endfor %} {% endfor %}
</table> </table>
@ -172,7 +175,7 @@
<div class="card-body"> <div class="card-body">
<table class="table table-striped table-bordered table-responsive-lg"> <table class="table table-striped table-bordered table-responsive-lg">
<thead class="thead-dark"> <thead class="thead-dark">
<TH>User ID</TH><TH>Realm</TH><TH>Resource</TH><TH>MQTT Connected</TH><TH>XMPP Connected</TH> <TH>User ID</TH><TH>Realm</TH><TH>Resource</TH><TH>MQTT Connected</TH><TH>XMPP Connected</TH><TH>Action</TH>
</thead> </thead>
{% for client in clients %} {% for client in clients %}
<TR> <TR>
@ -181,6 +184,7 @@
<TD>{{ client.resource }}</TD> <TD>{{ client.resource }}</TD>
<TD {% if client.mqtt_connection == True %} class="table-success" {% endif %}> {{ client.mqtt_connection }} </TD> <TD {% if client.mqtt_connection == True %} class="table-success" {% endif %}> {{ client.mqtt_connection }} </TD>
<TD {% if client.xmpp_connection == True %} class="table-success" {% endif %}> {{ client.xmpp_connection }}</TD> <TD {% if client.xmpp_connection == True %} class="table-success" {% endif %}> {{ client.xmpp_connection }}</TD>
<TD> <button type="button" class="btn btn-outline-danger btn-sm" onclick="removeClient('{{ client.resource }}');">Remove</button> </TD>
</TR> </TR>
{% endfor %} {% endfor %}
</table> </table>

View file

@ -125,6 +125,16 @@ async def test_restartService(aiohttp_client):
xmpp_server.disconnect() xmpp_server.disconnect()
async def test_RemoveBot(aiohttp_client):
client = await aiohttp_client(create_app)
resp = await client.get("/bot/remove/test_did")
assert resp.status == 200
async def test_RemoveClient(aiohttp_client):
client = await aiohttp_client(create_app)
resp = await client.get("/client/remove/test_resource")
assert resp.status == 200
async def test_login(aiohttp_client): async def test_login(aiohttp_client):
remove_existing_db() remove_existing_db()

View file

@ -141,5 +141,8 @@ def test_client_db():
bumper.client_get("resource_123")["xmpp_connection"] == False bumper.client_get("resource_123")["xmpp_connection"] == False
) # Test that xmpp was set False for client ) # Test that xmpp was set False for client
assert ( assert (
len(bumper.get_disconnected_xmpp_clients()) == 1 len(bumper.get_disconnected_xmpp_clients()) > 0
) # Test len of connected xmpp clients is 1 ) # Test len of connected xmpp clients is 1
bumper.client_remove("resource_123")
assert bumper.client_get("resource_123") == None