dev details refactoring v0.1

This commit is contained in:
Jokob-sk
2023-09-08 08:03:00 +10:00
parent 04a91b2bb7
commit a3b05c3760
8 changed files with 255 additions and 153 deletions

View File

@@ -35,6 +35,7 @@ services:
- ${DEV_LOCATION}/front/api:/home/pi/pialert/front/api - ${DEV_LOCATION}/front/api:/home/pi/pialert/front/api
- ${DEV_LOCATION}/front/php:/home/pi/pialert/front/php - ${DEV_LOCATION}/front/php:/home/pi/pialert/front/php
- ${DEV_LOCATION}/front/deviceDetails.php:/home/pi/pialert/front/deviceDetails.php - ${DEV_LOCATION}/front/deviceDetails.php:/home/pi/pialert/front/deviceDetails.php
- ${DEV_LOCATION}/front/deviceDetailsTools.php:/home/pi/pialert/front/deviceDetailsTools.php
- ${DEV_LOCATION}/front/devices.php:/home/pi/pialert/front/devices.php - ${DEV_LOCATION}/front/devices.php:/home/pi/pialert/front/devices.php
- ${DEV_LOCATION}/front/events.php:/home/pi/pialert/front/events.php - ${DEV_LOCATION}/front/events.php:/home/pi/pialert/front/events.php
- ${DEV_LOCATION}/front/plugins.php:/home/pi/pialert/front/plugins.php - ${DEV_LOCATION}/front/plugins.php:/home/pi/pialert/front/plugins.php

View File

@@ -102,13 +102,6 @@
<div id="navDevice" class="nav-tabs-custom"> <div id="navDevice" class="nav-tabs-custom">
<ul class="nav nav-tabs" style="fon t-size:16px;"> <ul class="nav nav-tabs" style="fon t-size:16px;">
<li> <a id="tabDetails" href="#panDetails" data-toggle="tab"> <?= lang('DevDetail_Tab_Details');?> </a></li> <li> <a id="tabDetails" href="#panDetails" data-toggle="tab"> <?= lang('DevDetail_Tab_Details');?> </a></li>
<?php
if ($_REQUEST['mac'] != 'Internet') {
?>
<li> <a id="tabNmap" href="#panNmap" data-toggle="tab"> <?= lang('DevDetail_Tab_Nmap');?> </a></li>
<?php
}
?>
<li> <a id="tabTools" href="#panTools" data-toggle="tab"> <?= lang('DevDetail_Tab_Tools');?> </a></li> <li> <a id="tabTools" href="#panTools" data-toggle="tab"> <?= lang('DevDetail_Tab_Tools');?> </a></li>
<li> <a id="tabSessions" href="#panSessions" data-toggle="tab"> <?= lang('DevDetail_Tab_Sessions');?> </a></li> <li> <a id="tabSessions" href="#panSessions" data-toggle="tab"> <?= lang('DevDetail_Tab_Sessions');?> </a></li>
<li> <a id="tabPresence" href="#panPresence" data-toggle="tab"> <?= lang('DevDetail_Tab_Presence');?> </a></li> <li> <a id="tabPresence" href="#panPresence" data-toggle="tab"> <?= lang('DevDetail_Tab_Presence');?> </a></li>
@@ -534,149 +527,15 @@
</table> </table>
</div> </div>
<!-- tab page "Nmap" ------------------------------------------------------------ -->
<div class="tab-pane fade" id="panNmap">
<h4 class=""><i class="fa-solid fa-ethernet"></i> <?= lang('DevDetail_Nmap_Scans');?></h4>
<div style="width:100%; text-align: center;">
<script>
setTimeout(function(){
document.getElementById('piamanualnmap_fast').innerHTML='<?= lang('DevDetail_Nmap_buttonFast');?> (' + document.getElementById('txtLastIP').value +')';
document.getElementById('piamanualnmap_normal').innerHTML='<?= lang('DevDetail_Nmap_buttonDefault');?> (' + document.getElementById('txtLastIP').value +')';
document.getElementById('piamanualnmap_detail').innerHTML='<?= lang('DevDetail_Nmap_buttonDetail');?> (' + document.getElementById('txtLastIP').value +')';
document.getElementById('piamanualnmap_skipdiscovery').innerHTML='<?= lang('DevDetail_Nmap_buttonSkipDiscovery');?> (' + document.getElementById('txtLastIP').value +')';
}, 2000);
</script>
<button type="button" id="piamanualnmap_fast" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'fast')"><?= lang("DevDetail_Loading");?></button>
<button type="button" id="piamanualnmap_normal" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'normal')"><?= lang("DevDetail_Loading");?></button>
<button type="button" id="piamanualnmap_detail" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'detail')"><?= lang("DevDetail_Loading");?></button>
<button type="button" id="piamanualnmap_skipdiscovery" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'skipdiscovery')"><?= lang("DevDetail_Loading");?></button>
<div style="text-align: left;">
<ul style="padding:20px;">
<li><?= lang('DevDetail_Nmap_buttonFast_text');?></li>
<li><?= lang('DevDetail_Nmap_buttonDefault_text');?></li>
<li><?= lang('DevDetail_Nmap_buttonDetail_text');?></li>
<li><?= lang('DevDetail_Nmap_buttonSkipDiscovery_text');?></li>
<li><a onclick="setCache('activeMaintenanceTab', 'tab_Logging_id')" href="/maintenance.php#tab_Logging"><?= lang('DevDetail_Nmap_resultsLink');?></a></li>
</ul>
</div>
</div>
<div id="scanoutput" style="margin-top: 30px;"></div>
<script>
function manualnmapscan(targetip, mode) {
$( "#scanoutput" ).empty();
$.ajax({
method: "POST",
url: "./php/server/nmap_scan.php",
data: { scan: targetip, mode: mode },
beforeSend: function() { $('#scanoutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#scanoutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
console.log(data);
$("#scanoutput").html(data);
}
})
}
</script>
</div>
<!-- tab page "Tools" ------------------------------------------------------------ --> <!-- tab page "Tools" ------------------------------------------------------------ -->
<div class="tab-pane fade" id="panTools"> <div class="tab-pane fade" id="panTools">
<?php <?php
if ($_REQUEST['mac'] == 'Internet') { require 'deviceDetailsTools.php';
?>
<h4 class=""><i class="fa-solid fa-globe"></i> <?= lang('DevDetail_Tab_Tools_Internet_Info_Title');?></h4>
<h5 class=""><?= lang('DevDetail_Tab_Tools_Internet_Info_Description');?></h5>
<br>
<div style="width:100%; text-align: center; margin-bottom: 50px;">
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="internetinfo()"><?= lang('DevDetail_Tab_Tools_Internet_Info_Start');?></button>
<br><div id="internetinfooutput" style="margin-top: 10px;"></div>
</div>
<script>
function internetinfo() {
$( "#internetinfooutput" ).empty();
$.ajax({
method: "POST",
url: "./php/server/internetinfo.php",
beforeSend: function() { $('#internetinfooutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#internetinfooutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
$("#internetinfooutput").html(data);
}
})
}
</script>
<?php
}
?> ?>
<?php
if ($_REQUEST['mac'] == 'Internet') {
?>
<h4 class=""><i class="fa-solid fa-gauge-high"></i> <?= lang('DevDetail_Tab_Tools_Speedtest_Title');?></h4>
<h5 class=""><?= lang('DevDetail_Tab_Tools_Speedtest_Description');?></h5>
<br>
<div style="width:100%; text-align: center; margin-bottom: 50px;">
<button type="button" id="speedtestcli" class="btn btn-primary pa-btn" style="margin: auto;" onclick="speedtestcli()"><?= lang('DevDetail_Tab_Tools_Speedtest_Start');?></button>
<br><div id="speedtestoutput" style="margin-top: 10px;"></div>
</div>
<script>
function speedtestcli() {
$( "#speedtestoutput" ).empty();
$.ajax({
method: "POST",
url: "./php/server/speedtestcli.php",
beforeSend: function() { $('#speedtestoutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#speedtestoutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
$("#speedtestoutput").html(data);
}
})
}
</script>
<?php
}
?>
<?php
if ($_REQUEST['mac'] != 'Internet') {
?>
<h4 class=""><i class="fa-solid fa-route"></i> <?= lang('DevDetail_Tab_Tools_Traceroute_Title');?></h4>
<h5 class=""><?= lang('DevDetail_Tab_Tools_Traceroute_Description');?></h5>
<div style="width:100%; text-align: center; margin-bottom: 50px;">
<button type="button" id="traceroute" class="btn btn-primary pa-btn" style="margin: auto;" onclick="traceroute()"><?= lang('DevDetail_Tab_Tools_Traceroute_Start');?></button>
<br><div id="tracerouteoutput" style="margin-top: 10px;"></div>
</div>
<script>
function traceroute() {
$( "#tracerouteoutput" ).empty();
$.ajax({
method: "GET",
url: "./php/server/traceroute.php?action=get&ip=" + document.getElementById('txtLastIP').value + "",
beforeSend: function() { $('#tracerouteoutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#tracerouteoutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
$("#tracerouteoutput").html(data);
}
})
}
</script>
<?php
}
?>
</div> </div>
@@ -1890,10 +1749,10 @@ function initializeTabsNew () {
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href") // activated tab var target = $(e.target).attr("href") // activated tab
if(target == "#panNmap") // if(target == "#panNmap")
{ // {
// loadNmap(); // // loadNmap();
} // }
}); });
} }

182
front/deviceDetailsTools.php Executable file
View File

@@ -0,0 +1,182 @@
<script>
deviceIP = getDeviceDataByMacAddress_NEW("<?php echo $_REQUEST["mac"]?>", "dev_LastIP")
</script>
<?php if ($_REQUEST["mac"] == "Internet") { ?>
<h4 class=""><i class="fa-solid fa-globe"></i>
<?= lang("DevDetail_Tab_Tools_Internet_Info_Title") ?>
</h4>
<h5 class="">
<?= lang("DevDetail_Tab_Tools_Internet_Info_Description") ?>
</h5>
<br>
<div style="width:100%; text-align: center; margin-bottom: 50px;">
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="internetinfo()">
<?= lang("DevDetail_Tab_Tools_Internet_Info_Start") ?></button>
<br>
<div id="internetinfooutput" style="margin-top: 10px;"></div>
</div>
<?php } ?>
<?php if ($_REQUEST["mac"] == "Internet") { ?>
<h4 class=""><i class="fa-solid fa-gauge-high"></i>
<?= lang("DevDetail_Tab_Tools_Speedtest_Title") ?>
</h4>
<h5 class="">
<?= lang("DevDetail_Tab_Tools_Speedtest_Description") ?>
</h5>
<br>
<div style="width:100%; text-align: center; margin-bottom: 50px;">
<button type="button" id="speedtestcli" class="btn btn-primary pa-btn" style="margin: auto;" onclick="speedtestcli()">
<?= lang("DevDetail_Tab_Tools_Speedtest_Start") ?></button>
<br>
<div id="speedtestoutput" style="margin-top: 10px;"></div>
</div>
<?php } ?>
<?php if ($_REQUEST["mac"] != "Internet") { ?>
<h4 class=""><i class="fa-solid fa-route"></i>
<?= lang("DevDetail_Tab_Tools_Traceroute_Title") ?>
</h4>
<h5 class="">
<?= lang("DevDetail_Tab_Tools_Traceroute_Description") ?>
</h5>
<div style="width:100%; text-align: center; margin-bottom: 50px;">
<button type="button" id="traceroute" class="btn btn-primary pa-btn" style="margin: auto;" onclick="traceroute()">
<?= lang("DevDetail_Tab_Tools_Traceroute_Start") ?>
</button>
<br>
<div id="tracerouteoutput" style="margin-top: 10px;"></div>
</div>
<?php } ?>
<h4 class=""><i class="fa-solid fa-ethernet"></i>
<?= lang("DevDetail_Nmap_Scans") ?>
</h4>
<div style="width:100%; text-align: center;">
<div>
<?= lang("DevDetail_Nmap_Scans_desc") ?>
</div>
<button type="button" id="piamanualnmap_fast" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(deviceIP, 'fast')">
<?= lang("DevDetail_Loading") ?>
</button>
<button type="button" id="piamanualnmap_normal" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(deviceIP, 'normal')">
<?= lang("DevDetail_Loading") ?>
</button>
<button type="button" id="piamanualnmap_detail" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(deviceIP, 'detail')">
<?= lang("DevDetail_Loading") ?>
</button>
<button type="button" id="piamanualnmap_skipdiscovery" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(deviceIP, 'skipdiscovery')">
<?= lang("DevDetail_Loading") ?>
</button>
<div style="text-align: left;">
<ul style="padding:20px;">
<li>
<?= lang("DevDetail_Nmap_buttonFast_text") ?>
</li>
<li>
<?= lang("DevDetail_Nmap_buttonDefault_text") ?>
</li>
<li>
<?= lang("DevDetail_Nmap_buttonDetail_text") ?>
</li>
<li>
<?= lang("DevDetail_Nmap_buttonSkipDiscovery_text") ?>
</li>
<li>
<a onclick="setCache('activeMaintenanceTab', 'tab_Logging_id')" href="/maintenance.php#tab_Logging">
<?= lang("DevDetail_Nmap_resultsLink") ?>
</a>
</li>
</ul>
</div>
</div>
<div id="scanoutput" style="margin-top: 30px;"></div>
<script>
// ----------------------------------------------------------------
function manualnmapscan(targetip, mode) {
$( "#scanoutput" ).empty();
$.ajax({
method: "POST",
url: "./php/server/nmap_scan.php",
data: { scan: targetip, mode: mode },
beforeSend: function() { $('#scanoutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#scanoutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
console.log(data);
$("#scanoutput").html(data);
}
})
}
// ----------------------------------------------------------------
function speedtestcli() {
$( "#speedtestoutput" ).empty();
$.ajax({
method: "POST",
url: "./php/server/speedtestcli.php",
beforeSend: function() { $('#speedtestoutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#speedtestoutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
$("#speedtestoutput").html(data);
}
})
}
// ----------------------------------------------------------------
function traceroute() {
$( "#tracerouteoutput" ).empty();
$.ajax({
method: "GET",
url: "./php/server/traceroute.php?action=get&ip=" + deviceIP + "",
beforeSend: function() { $('#tracerouteoutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#tracerouteoutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
$("#tracerouteoutput").html(data);
}
})
}
// ----------------------------------------------------------------
setTimeout(function(){
document.getElementById('piamanualnmap_fast').innerHTML='<?= lang(
"DevDetail_Nmap_buttonFast"
) ?> (' + deviceIP +')';
document.getElementById('piamanualnmap_normal').innerHTML='<?= lang(
"DevDetail_Nmap_buttonDefault"
) ?> (' + deviceIP +')';
document.getElementById('piamanualnmap_detail').innerHTML='<?= lang(
"DevDetail_Nmap_buttonDetail"
) ?> (' + deviceIP +')';
document.getElementById('piamanualnmap_skipdiscovery').innerHTML='<?= lang(
"DevDetail_Nmap_buttonSkipDiscovery"
) ?> (' + deviceIP +')';
}, 2000);
// ----------------------------------------------------------------
function internetinfo() {
$( "#internetinfooutput" ).empty();
$.ajax({
method: "POST",
url: "./php/server/internetinfo.php",
beforeSend: function() { $('#internetinfooutput').addClass("ajax_scripts_loading"); },
complete: function() { $('#internetinfooutput').removeClass("ajax_scripts_loading"); },
success: function(data, textStatus) {
$("#internetinfooutput").html(data);
}
})
}
</script>

View File

@@ -486,6 +486,11 @@ function navigateToDeviceWithIp (ip) {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
function getNameByMacAddress(macAddress) { function getNameByMacAddress(macAddress) {
return getDeviceDataByMacAddress(macAddress, "name")
}
// -----------------------------------------------------------------------------
function getDeviceDataByMacAddress(macAddress, property) {
const sessionDataKey = 'devicesListAll'; const sessionDataKey = 'devicesListAll';
const sessionData = sessionStorage.getItem(sessionDataKey); const sessionData = sessionStorage.getItem(sessionDataKey);
@@ -499,7 +504,39 @@ function getNameByMacAddress(macAddress) {
for (const device of devices) { for (const device of devices) {
if (device.mac === macAddress) { if (device.mac === macAddress) {
return device.name; if ( device.mac == 'd2:a4:1a:74:ae:86')
{
console.log(device)
}
return device[property];
}
}
return "Unknown"; // Return a default value if MAC address is not found
}
// -----------------------------------------------------------------------------
function getDeviceDataByMacAddress_NEW(macAddress, property) {
const sessionDataKey = 'devicesListAll_JSON';
const sessionData = sessionStorage.getItem(sessionDataKey);
if (!sessionData) {
console.log(`Session variable "${sessionDataKey}" not found.`);
return "Unknown";
}
const devices = JSON.parse(sessionData);
for (const device of devices) {
if (device.mac === macAddress) {
if ( device.mac == 'd2:a4:1a:74:ae:86')
{
console.log(device)
}
return device[property];
} }
} }
@@ -531,6 +568,23 @@ function initDeviceListAll()
} }
var devicesListAll = []; // this will contain a list off all devices var devicesListAll = []; // this will contain a list off all devices
// -----------------------------------------------------------------------------
function initDeviceListAll_JSON()
{
$.get('/api/table_devices.json', function(data) {
console.log(data)
devicesListAll_JSON = data["data"]
setCache('devicesListAll_JSON', JSON.stringify(devicesListAll_JSON))
});
}
var devicesListAll_JSON = []; // this will contain a list off all devices
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
function isEmpty(value) function isEmpty(value)
@@ -542,6 +596,7 @@ function isEmpty(value)
cacheSettings() cacheSettings()
cacheStrings() cacheStrings()
initDeviceListAll() initDeviceListAll()
initDeviceListAll_JSON()
console.log("init pialert_common.js") console.log("init pialert_common.js")

View File

@@ -149,7 +149,7 @@
"DevDetail_Tab_Tools_Speedtest_Description" : "The Speedtest tool measures the download speed, upload speed and latency of the internet connection.", "DevDetail_Tab_Tools_Speedtest_Description" : "The Speedtest tool measures the download speed, upload speed and latency of the internet connection.",
"DevDetail_Tab_Tools_Speedtest_Start" : "Start Speedtest", "DevDetail_Tab_Tools_Speedtest_Start" : "Start Speedtest",
"DevDetail_Tab_Tools_Traceroute_Title": "Traceroute", "DevDetail_Tab_Tools_Traceroute_Title": "Traceroute",
"DevDetail_Tab_Tools_Traceroute_Description": "Traceroute is a network diagnostic command used to trace the path that data packets take from one host to another.<br><br>The command uses the Internet Control Message Protocol (ICMP) to send packets to intermediate nodes on the route, each intermediate node responds with an ICMP time-out (TTL timed out) packet.<br><br>The output of the traceroute command displays the IP address of each intermediate node on the route.<br><br>The output of the traceroute command displays the IP address of each intermediate node on the route.<br><br>The traceroute command can be used to diagnose network problems, such as delays, packet loss, and blocked routes.<br><br>It can also be used to identify the location of an intermediate node on a network.", "DevDetail_Tab_Tools_Traceroute_Description": "Traceroute is a network diagnostic command used to trace the path that data packets take from one host to another.<br><br>The command uses the Internet Control Message Protocol (ICMP) to send packets to intermediate nodes on the route, each intermediate node responds with an ICMP time-out (TTL timed out) packet.<br><br>The output of the traceroute command displays the IP address of each intermediate node on the route.<br><br>The traceroute command can be used to diagnose network problems, such as delays, packet loss, and blocked routes.<br><br>It can also be used to identify the location of an intermediate node on a network.",
"DevDetail_Tab_Tools_Traceroute_Start": "Start Traceroute", "DevDetail_Tab_Tools_Traceroute_Start": "Start Traceroute",
"DevDetail_Tab_Tools_Traceroute_Error": "Error: IP address is not valid", "DevDetail_Tab_Tools_Traceroute_Error": "Error: IP address is not valid",
"DevDetail_Tab_Nmap" : "<i class=\"fa fa-ethernet\"></i> Nmap", "DevDetail_Tab_Nmap" : "<i class=\"fa fa-ethernet\"></i> Nmap",
@@ -232,7 +232,8 @@
"DevDetail_Nmap_buttonSkipDiscovery" : "Skip host discovery", "DevDetail_Nmap_buttonSkipDiscovery" : "Skip host discovery",
"DevDetail_Nmap_buttonSkipDiscovery_text" : "Skip host discovery (-Pn option): Default scan without host discovery", "DevDetail_Nmap_buttonSkipDiscovery_text" : "Skip host discovery (-Pn option): Default scan without host discovery",
"DevDetail_Nmap_resultsLink" : "You can leave this page after starting a scan. Results will be also available in the <code>pialert_front.log</code> file.", "DevDetail_Nmap_resultsLink" : "You can leave this page after starting a scan. Results will be also available in the <code>pialert_front.log</code> file.",
"DevDetail_Nmap_Scans": "Nmap Scans", "DevDetail_Nmap_Scans": "Manual Nmap Scans",
"DevDetail_Nmap_Scans_desc": "Here you can execute manual NMAP scans. You can also schedule regular automatic NMAP scans via the Services & Ports (NMAP) plugin. Head to <a href='/settings.php' target='_blank'>Settings</a> to find out more",
"BackDevDetail_Actions_Title_Run" : "Run action", "BackDevDetail_Actions_Title_Run" : "Run action",
"BackDevDetail_Actions_Not_Registered" : "Action not registered: ", "BackDevDetail_Actions_Not_Registered" : "Action not registered: ",
"BackDevDetail_Actions_Ask_Run" : "Do you want to execute the action?", "BackDevDetail_Actions_Ask_Run" : "Do you want to execute the action?",

0
front/plugins/csv_backup/README_DE.md Normal file → Executable file
View File

0
front/plugins/csv_backup/README_ES.md Normal file → Executable file
View File

View File

@@ -100,6 +100,10 @@ def construct_notifications(db, sqlQuery, tableTitle, skipText = False, supplied
notiStruc = noti_struc(jsn, text, html) notiStruc = noti_struc(jsn, text, html)
if not notiStruc.json['data'] and not notiStruc.text and not notiStruc.html:
mylog('debug', '[Notification] notiStruc is empty')
else:
mylog('debug', ['[Notification] notiStruc:', json.dumps(notiStruc.__dict__, indent=4)]) mylog('debug', ['[Notification] notiStruc:', json.dumps(notiStruc.__dict__, indent=4)])
return notiStruc return notiStruc