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("/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(
"/{apiversion}/private/{country}/{language}/{devid}/{apptype}/{appversion}/{devtype}/{aid}/user/login",
@ -381,6 +383,32 @@ class ConfServer:
confserverlog.exception("{}".format(e))
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):
try:
user_devid = request.match_info.get("devid", "")

View file

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

View file

@ -5,41 +5,43 @@
<title>Bumper</title>
<meta http-equiv="refresh" content="5" />
<script>
function restartHelperbot() {
console.log("restart helperbot");
fetch('restart_Helperbot')
function restartService(service) {
console.log("restart service", service);
fetch('restart_' + service)
.then((response) => {
return response.json();
})
.then((myJson) => {
alert("Restarting Helperbot: " + myJson["status"])
console.log("restart helperbot - " + myJson["status"]);
alert("Restarting " + service + ": " + myJson["status"])
console.log("restart",service,"-",myJson["status"]);
});
}
function restartMQTTServer() {
console.log("restart mqtt server");
fetch('restart_MQTTServer')
function removeBot(did) {
console.log("remove bot",did);
fetch('bot/remove/' + did)
.then((response) => {
return response.json();
})
.then((myJson) => {
alert("Restarting MQTT Server: " + myJson["status"])
console.log("restart mqtt server - " + myJson["status"]);
alert("Removing Bot (DID) - " + did + " - " + myJson["status"])
console.log("remove bot",did, myJson["status"]);
});
}
function restartXMPPServer() {
console.log("restart xmpp server");
fetch('restart_XMPPServer')
function removeClient(resource) {
console.log("remove client",resource);
fetch('client/remove/' + resource)
.then((response) => {
return response.json();
})
.then((myJson) => {
alert("Restarting XMPP Server: " + myJson["status"])
console.log("restart xmpp server - " + myJson["status"]);
alert("Removing Client - resource - " + resource + " - " + myJson["status"])
console.log("remove client",resource, myJson["status"]);
});
}
@ -66,7 +68,7 @@
<div class="card border border-dark">
<div class="card card-header">
<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 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 %}
@ -93,7 +95,7 @@
<div class="card border border-dark">
<div class="card card-header">
<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 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 %}
@ -120,7 +122,7 @@
<div class="card border border-dark">
<div class="card card-header">
<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>
@ -143,7 +145,7 @@
<div class="card-body">
<table class="table table-striped table-bordered table-responsive-lg">
<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>
{% for bot in bots %}
<TR>
@ -156,6 +158,7 @@
<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> <button type="button" class="btn btn-outline-danger btn-sm" onclick="removeBot('{{ bot.did }}');">Remove</button> </TD>
</TR>
{% endfor %}
</table>
@ -172,7 +175,7 @@
<div class="card-body">
<table class="table table-striped table-bordered table-responsive-lg">
<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>
{% for client in clients %}
<TR>
@ -181,6 +184,7 @@
<TD>{{ client.resource }}</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> <button type="button" class="btn btn-outline-danger btn-sm" onclick="removeClient('{{ client.resource }}');">Remove</button> </TD>
</TR>
{% endfor %}
</table>

View file

@ -125,6 +125,16 @@ async def test_restartService(aiohttp_client):
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):
remove_existing_db()

View file

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