Skip to content

Commit 2c51a22

Browse files
committed
test
1 parent 7e7ccf6 commit 2c51a22

7 files changed

Lines changed: 158 additions & 10 deletions

File tree

OpenFlow/src/Messages/Message.ts

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { V1ResourceRequirements, V1Deployment } from "@kubernetes/client-node";
1717
import { amqpwrapper } from "../amqpwrapper";
1818
import { WebSocketServerClient } from "../WebSocketServerClient";
1919
import { DBHelper } from "../DBHelper";
20+
import { WebSocketServer } from "../WebSocketServer";
2021
var request = require("request");
2122
var got = require("got");
2223

@@ -175,6 +176,12 @@ export class Message {
175176
case "stripemessage":
176177
this.StripeMessage(cli);
177178
break;
179+
case "dumpclients":
180+
this.DumpClients(cli);
181+
break;
182+
case "dumprabbitmq":
183+
this.DumpRabbitmq(cli);
184+
break;
178185
default:
179186
this.UnknownCommand(cli);
180187
break;
@@ -2162,7 +2169,84 @@ export class Message {
21622169
}
21632170
this.Send(cli);
21642171
}
2165-
2172+
async DumpClients(cli: WebSocketServerClient) {
2173+
this.Reply();
2174+
try {
2175+
const jwt = Crypt.rootToken();
2176+
const known = await Config.db.query({ _type: "socketclient" }, null, 5000, 0, null, "configclients", jwt);
2177+
for (let i = 0; i < WebSocketServer._clients.length; i++) {
2178+
let client = WebSocketServer._clients[i];
2179+
let id = client.id;
2180+
let exists = known.filter((x: any) => x.id == id);
2181+
let item: any = {
2182+
id: client.id, user: client.user, clientagent: client.clientagent, clientversion: client.clientversion
2183+
, lastheartbeat: client.lastheartbeat, _type: "socketclient", name: client.id
2184+
};
2185+
if (client.user != null) { item.name = client.user.name + "/" + client.clientagent + "/" + client.id; }
2186+
if (exists.length == 0) {
2187+
await Config.db.InsertOne(item, "configclients", 1, false, jwt);
2188+
} else {
2189+
item._id = exists[i]._id;
2190+
await Config.db._UpdateOne(null, item, "configclients", 1, false, jwt);
2191+
}
2192+
}
2193+
for (let i = 0; i < known.length; i++) {
2194+
let client: any = known[i];
2195+
let id = client.id;
2196+
let exists = WebSocketServer._clients.filter((x: any) => x.id == id);
2197+
if (exists.length == 0) {
2198+
await Config.db.DeleteOne(client._id, "configclients", jwt);
2199+
}
2200+
}
2201+
} catch (error) {
2202+
this.data = "";
2203+
cli._logger.error(error);
2204+
}
2205+
this.Send(cli);
2206+
}
2207+
async DumpRabbitmq(cli: WebSocketServerClient) {
2208+
this.Reply();
2209+
try {
2210+
const jwt = Crypt.rootToken();
2211+
const known = await Config.db.query({ _type: "queue" }, null, 5000, 0, null, "configclients", jwt);
2212+
const queues = await amqpwrapper.getqueues(Config.amqp_url, '/');
2213+
for (let i = 0; i < queues.length; i++) {
2214+
let queue = queues[i];
2215+
let exists = known.filter((x: any) => x.queuename == queue.name);
2216+
let item: any = {
2217+
name: queue.id, consumers: queue.consumers, consumer_details: queue.consumer_details, _type: "queue"
2218+
};
2219+
var consumers: number = 0;
2220+
if (queue.consumers > 0) { consumers = queue.consumers; }
2221+
if (consumers == 0) {
2222+
if (queue.consumer_details != null && queue.consumer_details.length > 0) {
2223+
consumers = queue.consumer_details.length;
2224+
}
2225+
}
2226+
item.queuename = queue.name;
2227+
item.consumers = consumers;
2228+
item.name = queue.name + "(" + consumers + ")";
2229+
if (exists.length == 0) {
2230+
await Config.db.InsertOne(item, "configclients", 1, false, jwt);
2231+
} else {
2232+
item._id = exists[i]._id;
2233+
await Config.db._UpdateOne(null, item, "configclients", 1, false, jwt);
2234+
}
2235+
}
2236+
for (let i = 0; i < known.length; i++) {
2237+
let queue: any = known[i];
2238+
let id = queue.id;
2239+
let exists = queues.filter((x: any) => x.queuename == queue.name);
2240+
if (exists.length == 0) {
2241+
await Config.db.DeleteOne(queue._id, "configclients", jwt);
2242+
}
2243+
}
2244+
} catch (error) {
2245+
this.data = "";
2246+
cli._logger.error(error);
2247+
}
2248+
this.Send(cli);
2249+
}
21662250
}
21672251

21682252
export class JSONfn {

OpenFlow/src/WebSocketServerClient.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ export class WebSocketServerClient {
3131
public clientagent: string;
3232
public clientversion: string;
3333
public lastheartbeat: Date = new Date();
34-
34+
public id: string = "";
3535

3636
user: User;
3737
// public consumers: amqp_consumer[] = [];
3838
private queues: IHashTable<amqpqueue> = {};
3939

4040
constructor(logger: winston.Logger, socketObject: WebSocket) {
4141
this._logger = logger;
42+
this.id = Math.random().toString(36).substr(2, 9);
4243
this._socketObject = socketObject;
4344
this._receiveQueue = [];
4445
this._sendQueue = [];

OpenFlow/src/amqpwrapper.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ export class amqpwrapper {
385385
Math.random().toString() +
386386
Math.random().toString();
387387
}
388-
parseurl(amqp_url): url.UrlWithParsedQuery {
388+
static parseurl(amqp_url): url.UrlWithParsedQuery {
389389
var q = url.parse(amqp_url, true);
390390
(q as any).username = "guest";
391391
(q as any).password = "guest";
@@ -402,7 +402,7 @@ export class amqpwrapper {
402402
var result: boolean = false;
403403
try {
404404
result = await retry(async bail => {
405-
var queue = await this.getqueue(Config.amqp_url, '/', queuename);
405+
var queue = await amqpwrapper.getqueue(Config.amqp_url, '/', queuename);
406406
let hasConsumers: boolean = false;
407407
if (queue.consumers > 0) {
408408
hasConsumers = true;
@@ -436,7 +436,7 @@ export class amqpwrapper {
436436
}
437437
return false;
438438
}
439-
async getvhosts(amqp_url) {
439+
static async getvhosts(amqp_url) {
440440
var q = this.parseurl(amqp_url);
441441
var options = {
442442
headers: {
@@ -450,7 +450,7 @@ export class amqpwrapper {
450450
var payload = JSON.parse(response.body);
451451
return payload;
452452
}
453-
async getqueues(amqp_url, vhost) {
453+
static async getqueues(amqp_url, vhost) {
454454
var q = this.parseurl(amqp_url);
455455
var options = {
456456
headers: {
@@ -464,7 +464,7 @@ export class amqpwrapper {
464464
var payload = JSON.parse(response.body);
465465
return payload;
466466
}
467-
async getqueue(amqp_url, vhost, queuename) {
467+
static async getqueue(amqp_url, vhost, queuename) {
468468
var q = this.parseurl(amqp_url);
469469
var options = {
470470
headers: {

OpenFlow/src/public/Controllers.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { userdata, api, entityCtrl, entitiesCtrl } from "./CommonControllers";
2-
import { TokenUser, QueueMessage, SigninMessage, Ace, NoderedUser, Billing, stripe_customer, stripe_list, stripe_base, stripe_plan, stripe_subscription_item, Base, NoderedUtil, WebSocketClient, Role, NoderedConfig, Resources, ResourceValues, stripe_invoice } from "openflow-api";
2+
import { TokenUser, QueueMessage, SigninMessage, Ace, NoderedUser, Billing, stripe_customer, stripe_list, stripe_base, stripe_plan, stripe_subscription_item, Base, NoderedUtil, WebSocketClient, Role, NoderedConfig, Resources, ResourceValues, stripe_invoice, Message } from "openflow-api";
33
import { RPAWorkflow, Provider, Form, WorkflowInstance, Workflow, unattendedclient } from "./Entities";
44
import { WebSocketClientService } from "./WebSocketClientService";
55
import * as jsondiffpatch from "jsondiffpatch";
@@ -3415,3 +3415,38 @@ export class PaymentCtrl extends entityCtrl<Billing> {
34153415

34163416
}
34173417
}
3418+
export class DebugCtrl extends entitiesCtrl<Base> {
3419+
public message: string = "";
3420+
public charts: chartset[] = [];
3421+
constructor(
3422+
public $scope: ng.IScope,
3423+
public $location: ng.ILocationService,
3424+
public $routeParams: ng.route.IRouteParamsService,
3425+
public $interval: ng.IIntervalService,
3426+
public WebSocketClientService: WebSocketClientService,
3427+
public api: api,
3428+
public userdata: userdata
3429+
) {
3430+
super($scope, $location, $routeParams, $interval, WebSocketClientService, api, userdata);
3431+
this.collection = "configclients";
3432+
this.basequery = { _type: "queue" };
3433+
console.debug("DebugCtrl");
3434+
WebSocketClientService.onSignedin((user: TokenUser) => {
3435+
this.loadData();
3436+
});
3437+
}
3438+
async DumpClients() {
3439+
let m: Message = new Message();
3440+
m.command = "dumpclients"; m.data = "{}";
3441+
var q = await WebSocketClient.instance.Send<any>(m);
3442+
if ((q as any).command == "error") throw new Error(q.data);
3443+
this.loadData();
3444+
}
3445+
async DumpRabbitmq() {
3446+
let m: Message = new Message();
3447+
m.command = "dumprabbitmq"; m.data = "{}";
3448+
var q = await WebSocketClient.instance.Send<any>(m);
3449+
if ((q as any).command == "error") throw new Error(q.data);
3450+
this.loadData();
3451+
}
3452+
}

OpenFlow/src/public/Debug.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<button ng-click="ctrl.DumpClients()" type="button" class="btn btn-success ">Dump Clients</button>
2+
<button ng-click="ctrl.DumpRabbitmq()" type="button" class="btn btn-success ">Dump Rabbitmq</button>
3+
<button ng-click="ctrl.loadData()" type="button" class="btn btn-success ">Reload</button>
4+
5+
<table id=" table1" class="table table-striped table-hover table-sm" when-scrolled="ctrl.more()" style="width: 100%;">
6+
<thead class="thead-dark">
7+
<tr>
8+
<th scope="col" ng-click="ctrl.ToggleOrder('name')"><b translate lib="web">name</b></th>
9+
<th scope="col" ng-click="ctrl.ToggleOrder('_type')"><b translate lib="web">type</b></th>
10+
<th scope="col" ng-click="ctrl.ToggleOrder('consumers')"><b translate lib="web">consumers</b></th>
11+
<th scope="col" ng-click="ctrl.ToggleOrder('queuename')"><b translate lib="web">queuename</b></th>
12+
<th scope="col" ng-click="ctrl.ToggleOrder('_modified')"><b translate lib="web">updated</b></th>
13+
</tr>
14+
</thead>
15+
<tbody>
16+
<tr ng-repeat="model in ctrl.models">
17+
<td>{{model.name}}</td>
18+
<td><span translate lib="web">{{model.type || model._type}}</span></td>
19+
<td>{{model.consumers}}</td>
20+
<td>{{model.queuename}}</td>
21+
<td>
22+
<timesince ng-model="model._modified" />
23+
</td>
24+
</tr>
25+
</tbody>
26+
</table>

OpenFlow/src/public/app.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { WebSocketClientService } from "./WebSocketClientService";
22
import angular = require("angular");
33
import { timesince, translate, textarea, fileread, userdata, api } from "./CommonControllers";
4-
import { MenuCtrl, ProvidersCtrl, MainCtrl, LoginCtrl, ProviderCtrl, UsersCtrl, UserCtrl, RolesCtrl, RoleCtrl, RPAWorkflowsCtrl, RPAWorkflowCtrl, WorkflowsCtrl, ReportsCtrl, jslogCtrl, EditFormCtrl, FormsCtrl, FormCtrl, FilesCtrl, EntitiesCtrl, EntityCtrl, HistoryCtrl, SocketCtrl, NoderedCtrl, hdrobotsCtrl, RobotsCtrl, AuditlogsCtrl, SignupCtrl, PaymentCtrl } from "./Controllers";
4+
import { MenuCtrl, ProvidersCtrl, MainCtrl, LoginCtrl, ProviderCtrl, UsersCtrl, UserCtrl, RolesCtrl, RoleCtrl, RPAWorkflowsCtrl, RPAWorkflowCtrl, WorkflowsCtrl, ReportsCtrl, jslogCtrl, EditFormCtrl, FormsCtrl, FormCtrl, FilesCtrl, EntitiesCtrl, EntityCtrl, HistoryCtrl, SocketCtrl, NoderedCtrl, hdrobotsCtrl, RobotsCtrl, AuditlogsCtrl, SignupCtrl, PaymentCtrl, DebugCtrl } from "./Controllers";
55

66
/**
77
* @type {angular.Module}
@@ -86,6 +86,8 @@ module openflow {
8686
.when('/Payment', { templateUrl: 'Payment.html', controller: PaymentCtrl, controllerAs: 'ctrl' })
8787
.when('/Payment/:userid', { templateUrl: 'Payment.html', controller: PaymentCtrl, controllerAs: 'ctrl' })
8888

89+
.when('/Debug', { templateUrl: 'Debug.html', controller: DebugCtrl, controllerAs: 'ctrl' })
90+
8991
.otherwise({ redirectTo: '/main' });
9092
}
9193
])

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.57
1+
1.0.58

0 commit comments

Comments
 (0)