@nodefony/monitoring-bundle
Version:
Nodefony Framework Bundle Monitoring
654 lines (593 loc) • 19.8 kB
JavaScript
/**
*
*/
stage.registerController("navController", function () {
/**
* extract menu from config file
*/
var extractMenu = function (config) {
try {
var components = config.content.bundles.bundle;
var navigation = null;
(stage.typeOf(components) === "array") ?
navigation = components:
navigation = new Array(components);
return navigation;
} catch (e) {
this.logger("Error while parsing app config file", "ERROR");
}
};
var format = function (d) {
var str = '<table class="table" style="padding-left:50px;">' +
'<thead>' +
'<tr>' +
'<th>Name</th>' +
'<th>Pattern</th>' +
'<th>Size</th>' +
'</tr>' +
'</thead>';
for (var ele in d.data) {
var strE = '<tr>' +
'<td>' + d.data[ele].name + '</td>' +
'<td>' + d.data[ele].bundle + "Bundle:" + (d.data[ele].directory === "." ? "" : d.data[ele].directory) + ":" + d.data[ele].name + '</td>' +
'<td>' + d.data[ele].size + '</td>' +
'</tr>';
str += strE;
}
str += '</table>';
return str;
};
var controller = class controller extends stage.Controller {
constructor(name, container, module) {
super(name, container, module);
this.config = this.module.config;
this.router = container.get("router");
// ROUTES
this.router.createRoute("services", "/services", {
controller: "appModule:nav:services"
});
this.router.createRoute("routing", "/routing", {
controller: "appModule:nav:routing"
});
this.router.createRoute("syslog", "/syslog", {
controller: "appModule:nav:syslog"
});
this.router.createRoute("configuration", "/config", {
controller: "appModule:nav:config"
});
this.router.createRoute("requests", "/requests", {
controller: "appModule:nav:requests"
});
this.router.createRoute("request", "/request/{uid}", {
controller: "appModule:nav:request"
});
this.router.createRoute("bundles", "/bundles", {
controller: "appModule:nav:config"
});
this.router.createRoute("users", "/users", {
controller: "appModule:nav:users"
});
this.router.createRoute("sessions", "/sessions", {
controller: "appModule:nav:sessions"
});
this.router.createRoute("firewall", "/firewall", {
controller: "appModule:nav:firewall"
});
this.router.createRoute("config-bundle", "/config/{bundle}", {
controller: "appModule:nav:config"
});
/*this.router.createRoute("request-details", "/request/{uid}/details", {
controller:"appModule:nav:request"
});
this.router.createRoute("request-details-request", "/request/{uid}/details/request", {
controller:"appModule:nav:request"
});
this.router.createRoute("request-details-response", "/request/{uid}/details/response", {
controller:"appModule:nav:request"
});
this.router.createRoute("request-details-flashes", "/request/{uid}/details/flashes", {
controller:"appModule:nav:request"
});
this.router.createRoute("request-session", "/request/{uid}/session", {
controller:"appModule:nav:request"
});
this.router.createRoute("request-firewall", "/request/{uid}/firewall", {
controller:"appModule:nav:request"
});
this.router.createRoute("request-twig", "/request/{uid}/twig", {
controller:"appModule:nav:request"
});*/
this.kernel.listen(this, "onUrlChange", function (url, fullurl, cache) {
// scroll to top for scrollable content
$("body").scrollTop(0);
// active the current menu
var items = $("#main_nav a.list-group-item");
items.each(function () {
var href = $(this).attr("href").substring(1);
if (href === url) {
items.removeClass("active");
$(this).addClass("active");
// case of collapsible menu
if ($(this).parent().hasClass("collapse")) {
$(this).parent().collapse("show");
} else {
$("#main_nav .collapse.in").collapse("hide");
}
}
});
});
}
/**
*
*/
indexAction() {
var nav = extractMenu.call(this, this.config);
var section = this.get("section");
var navView = this.renderPartial("appModule::navigation", {
"nav": nav,
"navCssId": "main_nav",
"environment": this.get("kernel").environment
});
this.render(section.aside, navView)
// collapsible menu behaviour
$("#main_nav .collapse").on("hidden.bs.collapse", function () {
$(this).prev().removeClass("focus");
});
$("#main_nav .collapse").on("hide.bs.collapse", function () {
$(this).prev().find(".collapse-icon").removeClass("fa-rotate-90");
});
$("#main_nav .collapse").on("show.bs.collapse", function () {
$(this).prev().addClass("focus");
$(this).prev().find(".collapse-icon").addClass("fa-rotate-90");
});
}
/*
*
*/
routingAction() {
$.ajax("/nodefony/api/routes", {
//dataType:"json",
success: function (data, status, xhr) {
this.renderDefaultContent("appModule:route:routing", {
routes: data.response.data
});
$("table").DataTable();
}.bind(this),
error: function (xhr, stats, error) {
this.logger(error, "ERROR");
}.bind(this)
})
}
configAction(bundleName) {
if (!bundleName) {
$.ajax("/nodefony/api/config", {
//dataType:"json",
success: function (data, status, xhr) {
//console.log(data.response.data)
this.renderDefaultContent("appModule:kernel:kernel", {
config: data.response.data.kernel,
debug: data.response.data.debug,
nodejs: data.response.data.nodejs,
events: data.response.data.events,
bundles: data.response.data.bundles
});
var search = this.get("location").search();
if (search) {
if ("tab" in search) {
var selector = "a[data-target='#" + search.tab + "']";
$(selector).tab('show')
}
}
}.bind(this),
error: function (xhr, stats, error) {
this.logger(error, "ERROR");
}.bind(this)
})
} else {
$.ajax("/nodefony/api/config/" + bundleName, {
//dataType:"json",
success: function (data, status, xhr) {
//console.log(data.response.data.routing)
this.renderDefaultContent("appModule:bundles:bundle", {
name: data.response.data.config.name,
bundleName: bundleName,
locale: data.response.data.config.locale,
version: data.response.data.config.version,
routing: data.response.data.routing,
//files:data.response.data.files
});
$("#json").JSONView(data.response.data.config);
$("#json").JSONView("collapse");
$("#tableRouting").DataTable();
$("#filesData").JSONView(data.response.data.files);
$("#filesData").JSONView('toggle', 2);
//console.log(data.response.data.views)
var datas = [];
for (var ele in data.response.data.views) {
var ob = {
plus: "+",
directory: ele,
size: 0,
nbView: 0,
data: {}
};
for (var view in data.response.data.views[ele]) {
ob.nbView += 1;
ob.data[view] = {
name: data.response.data.views[ele][view].file.name,
size: data.response.data.views[ele][view].file.stats.size,
directory: ele,
bundle: data.response.data.bundleName
}
ob.size += data.response.data.views[ele][view].file.stats.size;
}
datas.push(ob)
}
//console.log(obj)
var table = $("#viewTable").DataTable({
"data": datas,
"columns": [{
"className": 'details-control',
"orderable": false,
"data": "plus",
"defaultContent": ''
}, {
"data": "directory"
}, {
"data": "nbView"
}, {
"data": "size"
}],
"order": [
[1, 'asc']
]
});
// Add event listener for opening and closing details
$('#viewTable tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown()) {
$(this).html("+")
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
} else {
// Open this row
$(this).html("-")
row.child(format(row.data())).show();
tr.addClass('shown');
}
});
}.bind(this),
error: function (xhr, stats, error) {
this.logger(error, "ERROR");
}.bind(this)
})
}
}
/*
*
*/
servicesAction() {
$.ajax("/nodefony/api/services", {
//dataType:"json",
success: function (data, status, xhr) {
this.renderDefaultContent("appModule:services:services", {
services: data.response.data
});
$("table").DataTable();
}.bind(this),
error: function (xhr, stats, error) {
this.logger(error, "ERROR");
}.bind(this)
})
}
/*
*
*/
syslogAction() {
$.ajax("/nodefony/api/syslog", {
success: function (data, status, xhr) {
this.module.serverSyslog.loadStack(data.response.data, true, function (pdu) {
pdu.timeago = jQuery.timeago(pdu.timeStamp)
})
this.renderDefaultContent("appModule:syslog:syslog", {
ringStack: this.module.serverSyslog.ringStack.reverse()
});
$("table").DataTable();
}.bind(this),
error: function (xhr, stats, error) {
this.logger(error, "ERROR");
}.bind(this)
});
}
/*
*
*/
requestsAction() {
this.renderDefaultContent("appModule:request:requests", {
requests: []
});
$("table").DataTable({
"processing": true,
"serverSide": true,
"ajax": {
url: "/nodefony/api/requests",
data: function (d) {
d.type = "dataTable";
},
"type": "GET",
//"dataSrc": "response.data",
},
"order": [
[3, "desc"]
],
"columns": [{
"name": "id",
"data": "uid"
},
{
"name": "remoteAddress",
"data": "remoteAddress"
},
{
"name": "userAgent",
"data": "userAgent"
},
{
"name": "createdAt",
"data": "timeStamp"
},
{
"name": "url",
"data": "url"
},
{
"name": "route",
"data": "route"
},
{
"name": "method",
"data": "method"
},
{
"name": "state",
"data": "state"
},
{
"name": "protocole",
"data": "protocole"
},
{
"name": "username",
"data": "username"
}
],
"rowCallback": function (row, data) {
$(row).click(function () {
this.redirect(this.generateUrl("request", {
uid: data.uid
}));
}.bind(this))
}.bind(this)
});
// SYSLOG
/*$.ajax("/nodefony/api/requests",{
success:function(data, status, xhr){
var obj = [];
for (var res in data.response.data ){
obj.push({
date: new Date( data.response.data[res].timeStamp ),
url:data.response.data[res].payload["request"].url,
method:data.response.data[res].payload["request"].method,
routing:data.response.data[res].payload["route"].name,
code:data.response.data[res].payload["response"].statusCode,
context:data.response.data[res].payload["context"],
user:data.response.data[res].payload["security"].user ? data.response.data[res].payload["security"].user.username : null ,
uid:data.response.data[res].uid
})
}
this.renderDefaultContent("appModule:request:requests",{
requests:obj
});
$("table").DataTable({
"paging": true,
"ordering": true,
"info": true
});
}.bind(this),
error:function(xhr,stats, error){
this.logger(error, "ERROR");
}.bind(this)
});*/
}
/*
*
*/
requestAction(uid) {
try {
$.ajax("/nodefony/api/request/" + uid, {
success: function (data, status, xhr) {
//console.log(data.response.data.payload)
//
if (data.response.data.payload["response"].message) {
try {
var message = data.response.data.payload["response"].message;
var parse = [];
for (var i = 0; message.length; i++) {
var ele = {};
ele["direction"] = message[i].direction;
if (message[i].direction === "RECEIVE") {
if (message[i].data.utf8Data) {
//ele["type"] = message[i].data.type ;
try {
ele["data"] = JSON.parse(message[i].data.utf8Data);
} catch (e) {
ele["utf8Data"] = message[i].data.utf8Data;
}
}
}
if (message[i].direction === "SEND") {
if (message[i].data) {
//ele["type"] = stage.typeOf(message[i].data) ;
try {
ele["data"] = JSON.parse(message[i].data);
} catch (e) {
ele["data"] = message[i].data;
}
}
}
parse.push(ele);
}
//console.log(message)
} catch (e) {
var message = data.response.data.payload["response"].message;
}
}
//console.log(data.response.data.payload)
this.renderDefaultContent("appModule:request:request", {
uid: uid,
date: new Date(data.response.data.payload.timeStamp),
url: data.response.data.payload["request"].url,
method: data.response.data.payload["request"].method,
status: data.response.data.payload["response"].statusCode,
ip: data.response.data.payload["request"].remoteAddress,
request: data.response.data.payload["request"],
response: data.response.data.payload["response"],
security: data.response.data.payload["context_secure"],
area_security: data.response.data.payload["security"],
//payload:data.response.data.payload,
router: data.response.data.payload["routeur"],
route: data.response.data.payload["route"],
routeParmeters: data.response.data.payload["routeParmeters"],
cookies: data.response.data.payload.cookies,
queryPost: data.response.data.payload.queryPost,
queryGet: data.response.data.payload.queryGet,
queryFile: data.response.data.payload.queryFile,
session: data.response.data.payload.session,
proxy: data.response.data.payload.proxy,
context: data.response.data.payload.context,
events: data.response.data.payload.events,
protocole: data.response.data.payload.protocole,
twig: data.response.data.payload.twig,
timeRequest: data.response.data.payloadtimeRequest,
message: message
});
var search = this.get("location").search();
if (search) {
if ("tab" in search) {
var selector = " a[data-target='#" + search.tab + "']";
$(selector).tab('show')
}
}
if (parse) {
$("#wsMessage").DataTable();
$("#jsonMessage").JSONView(parse);
$("#filesData").JSONView('toggle', 2);
}
}.bind(this),
error: function (xhr, stats, error) {
this.logger(error, "ERROR");
throw error;
}.bind(this)
});
} catch (error) {
throw error;
}
}
/*
*
*/
usersAction() {
$.ajax("/nodefony/api/users", {
//dataType:"json",
success: function (data, status, xhr) {
this.renderDefaultContent("appModule::users", {
users: data.response.data
});
$("table").DataTable();
}.bind(this),
error: function (xhr, stats, error) {
this.logger(error, "ERROR");
}.bind(this)
})
}
/*
*
*/
sessionsAction() {
this.renderDefaultContent("appModule::sessions", {
sessions: []
});
$("table").DataTable({
"processing": true,
"serverSide": true,
"ajax": {
url: "/nodefony/api/sessions",
data: function (d) {
d.type = "dataTable";
},
"type": "GET",
},
"order": [
[0, "desc"]
],
"columns": [{
"name": "updatedAt",
"data": "updatedAt"
},
{
"name": "username",
"data": "user.username"
},
{
"name": "metaBag",
"data": "metaBag.request"
},
{
"name": "session_id",
"data": "session_id"
},
{
"name": "context",
"data": "context"
},
{
"name": "metaBag",
"data": "metaBag.remoteAddress"
},
{
"name": "Attributes",
"data": "Attributes.lang"
},
{
"name": "ua",
"data": "metaBag.user_agent"
},
],
"rowCallback": (row, data) => {
$(row).click(() => {
//this.redirect( this.generateUrl("request",{uid:data.uid}) ) ;
})
}
});
}
/*
*
*/
firewallAction() {
$.ajax("/nodefony/api/security", {
//dataType:"json",
success: (data, status, xhr) => {
this.renderDefaultContent("appModule:security:firewall", {
security: data.response.data
});
},
error: (xhr, stats, error) => {
this.logger(error, "ERROR");
}
});
}
};
return controller;
});