mirror of https://github.com/Aidaho12/haproxy-wi
parent
8a57b9e0e5
commit
628552666c
|
@ -32,7 +32,7 @@ Web interface(user-friendly web GUI, alerting, monitoring and secure) for managi
|
|||
15. Create Groups and add/remove servers to ensure proper identification for your HAProxy, Nginx Clusters
|
||||
16. Send notifications to telegram directly from HAProxy-WI
|
||||
17. HAProxy-WI supports high Availability to ensure uptime to all Master slave servers configured
|
||||
18. SSL certificate support.
|
||||
18. SSL certificate support, Let's Encrypt support
|
||||
19. SSH Key support for managing multiple HAProxy Servers straight from HAProxy-WI
|
||||
20. SYN flood protect
|
||||
21. Alerting about changes backends state
|
||||
|
|
|
@ -724,7 +724,7 @@ def update_db_v_4_5_1(**kwargs):
|
|||
|
||||
def update_ver(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """update version set version = '4.5.0.1'; """
|
||||
sql = """update version set version = '4.5.1.0'; """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
|
|
|
@ -1349,17 +1349,12 @@ if form.getvalue('metrics_waf'):
|
|||
sql.update_waf_metrics_enable(form.getvalue('metrics_waf'), form.getvalue('enable'))
|
||||
|
||||
if form.getvalue('table_metrics'):
|
||||
import http.cookies
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
|
||||
template = env.get_template('table_metrics.html')
|
||||
|
||||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||
user_id = cookie.get('uuid')
|
||||
table_stat = sql.select_table_metrics(user_id.value)
|
||||
|
||||
template = template.render(table_stat=sql.select_table_metrics(user_id.value))
|
||||
template = template.render(table_stat=sql.select_table_metrics())
|
||||
print(template)
|
||||
|
||||
if form.getvalue('metrics_hapwi_ram'):
|
||||
|
|
32
app/sql.py
32
app/sql.py
|
@ -1191,6 +1191,7 @@ def select_waf_metrics_enable_server(ip):
|
|||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def select_waf_servers(serv):
|
||||
con, cur = get_cur()
|
||||
sql = """ select serv.ip from waf left join servers as serv on waf.server_id = serv.id where serv.ip = '%s' """ % serv
|
||||
|
@ -1269,6 +1270,7 @@ def insert_waf_metrics_enable(serv, enable):
|
|||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def insert_waf_rules(serv):
|
||||
con, cur = get_cur()
|
||||
sql = list()
|
||||
|
@ -1422,16 +1424,40 @@ def delete_mentrics():
|
|||
|
||||
def select_metrics(serv, **kwargs):
|
||||
con, cur = get_cur()
|
||||
|
||||
if mysql_enable == '1':
|
||||
sql = """ select * from metrics where serv = '%s' order by `date` desc limit 60 """ % serv
|
||||
if kwargs.get('time_range') == 60:
|
||||
date_from = "and date > now() - INTERVAL 60 minute and rowid % 2 = 0"
|
||||
elif kwargs.get('time_range') == 180:
|
||||
date_from = "and date > now() - INTERVAL 180 minute and rowid % 5 = 0"
|
||||
elif kwargs.get('time_range') == 720:
|
||||
date_from = "and date > now() - INTERVAL 720 minute and rowid % 9 = 0"
|
||||
elif kwargs.get('time_range') == 1440:
|
||||
date_from = "and date > now() - INTERVAL 1440 minute and rowid % 17 = 0"
|
||||
else:
|
||||
date_from = "and date > now() - INTERVAL 30 minute"
|
||||
sql = """ select * from metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(serv=serv, date_from=date_from)
|
||||
else:
|
||||
sql = """ select * from (select * from metrics where serv = '%s' order by `date` desc limit 60) order by `date` """ % serv
|
||||
if kwargs.get('time_range') == 60:
|
||||
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
|
||||
elif kwargs.get('time_range') == 180:
|
||||
date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0"
|
||||
elif kwargs.get('time_range') == 720:
|
||||
date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0"
|
||||
elif kwargs.get('time_range') == 1440:
|
||||
date_from = "and date > datetime('now', '-1440 minutes', 'localtime') and rowid % 17 = 0"
|
||||
else:
|
||||
date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
|
||||
|
||||
sql = """ select * from (select * from metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
else:
|
||||
return cur.fetchall()
|
||||
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
@ -1474,7 +1500,7 @@ def select_servers_metrics(uuid, **kwargs):
|
|||
con.close()
|
||||
|
||||
|
||||
def select_table_metrics(uuid):
|
||||
def select_table_metrics():
|
||||
con, cur = get_cur()
|
||||
import http.cookies
|
||||
import os
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#sessions_table').on( 'page.dt', function () { $.getScript("/inc/fontawesome.min.js"); } )
|
||||
.DataTable( {
|
||||
"order": [[ 5, "desc" ]],
|
||||
"pageLength": 25,
|
||||
"columnDefs": [
|
||||
{
|
||||
"searchable": false,
|
||||
"orderable": false,
|
||||
"targets": [ -1, -2 ]
|
||||
}
|
||||
],
|
||||
"lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
|
||||
} );
|
||||
} );
|
||||
</script>
|
||||
<table class="overview hover order-column display compact" id="sessions_table">
|
||||
<thead>
|
||||
<tr class="overviewHead">
|
||||
<th class="padding10" style="padding-left: 15px;">
|
||||
Protocol
|
||||
</th>
|
||||
<th>
|
||||
Source
|
||||
</th>
|
||||
<th>
|
||||
Frontend
|
||||
</th>
|
||||
<th>
|
||||
Backend
|
||||
</th>
|
||||
<th>
|
||||
Age
|
||||
</th>
|
||||
<th>
|
||||
Rate
|
||||
</th>
|
||||
<th>
|
||||
Expire
|
||||
</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for s in sessions %}
|
||||
{% if s != '' %}
|
||||
{% set session = s.split(' ') %}
|
||||
<tr>
|
||||
<td class="padding10" style="padding-left: 15px;">
|
||||
{{session.1.split('=')[1]}}
|
||||
</td>
|
||||
<td style="width: 20%">
|
||||
{{session.2.split('=')[1]}}
|
||||
</td>
|
||||
<td style="width: 10%">
|
||||
{{session.3.split('=')[1]}}
|
||||
</td>
|
||||
<td style="width: 10%">
|
||||
{{session.4.split('=')[1]}}
|
||||
</td>
|
||||
<td style="width: 10%">
|
||||
{{session.7.split('=')[1]}}
|
||||
</td>
|
||||
<td style="width: 10%">
|
||||
{{session.9.split('=')[1]}}
|
||||
</td>
|
||||
<td style="width: 70%">
|
||||
{{session.16.split('=')[1]}}
|
||||
</td>
|
||||
<td>
|
||||
<a class="info" title="Get more info about this session" style="cursor: pointer;" onclick="getSessionInfo('{{s.strip().split(':')[0]}}')"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="delete" title="Delete this session" style="cursor: pointer;" onclick="deleteSession(this, '{{s.strip().split(':')[0]}}')"></a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
|
@ -145,6 +145,8 @@
|
|||
<a class="delete" title="Delete this entry" style="cursor: pointer;" onclick="deleteTableEntry(this, '{{tables_head.0.strip()}}', '{{body.1.split('=')[1]}}')"></a>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<span class="alert alert-warning" style="margin-bottom: 0px;">Table is empty</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
</script>
|
||||
<script defer src="/inc/fa-solid.min.js"></script>
|
||||
<script defer src="/inc/fontawesome.min.js"></script>
|
||||
<script defer src="/inc/ion.sound.min.js"></script>
|
||||
<link href="/inc/awesome.css" rel="stylesheet">
|
||||
<link href="/inc/style.css" rel="stylesheet">
|
||||
<link href="/inc/nprogress.css" rel="stylesheet">
|
||||
|
|
|
@ -60,8 +60,10 @@
|
|||
</td>
|
||||
<td class="padding10 first-collumn" style="width: 20%;">
|
||||
{% set values = dict() %}
|
||||
{% set values = {'2.0.5-1':'2.0.5-1','2.0.6-1':'2.0.6-1', '2.0.7-1':'2.0.7-1', '2.0.9-1':'2.0.9-1', '2.0.11-1':'2.0.11-1', '2.0.12-1':'2.0.12-1', '2.0.13-1':'2.0.13-1', '2.0.14-1':'2.0.14-1'} %}
|
||||
{{ select('hapver', values=values, selected='2.0.14-1', required='required') }}
|
||||
{% set values = {'2.0.5-1':'2.0.5-1','2.0.6-1':'2.0.6-1', '2.0.7-1':'2.0.7-1', '2.0.9-1':'2.0.9-1',
|
||||
'2.0.11-1':'2.0.11-1', '2.0.12-1':'2.0.12-1', '2.0.13-1':'2.0.13-1', '2.0.14-1':'2.0.14-1',
|
||||
'2.0.17-1':'2.0.17-1'} %}
|
||||
{{ select('hapver', values=values, selected='2.0.17-1', required='required') }}
|
||||
</td>
|
||||
<td class="padding10 first-collumn">
|
||||
<select autofocus required name="haproxyaddserv" id="haproxyaddserv">
|
||||
|
|
|
@ -6,15 +6,18 @@
|
|||
<script src="/inc/jquery.timeago.js" type="text/javascript"></script>
|
||||
{% if smon_error != '' %}
|
||||
<center>
|
||||
<br />
|
||||
<h3>You do not have installed SMON service. Read <a href="https://haproxy-wi.org/services.py?service=smon"
|
||||
title="Simple monitoring network ports with alerting via Telegram and WEB pannel" target="_blank">here</a> how install SMON service</h3>
|
||||
</center>
|
||||
{% elif smon_status.0 == 'failed' %}
|
||||
<center>
|
||||
<br />
|
||||
<h3>SMON service is not run. Run the SMON service <a href="users.py#services" title="HAProxy-WI services" target="_blank">here</a> before use</h3>
|
||||
</center>
|
||||
{% elif smon|length == 0 and action != 'add' %}
|
||||
<center>
|
||||
<br />
|
||||
<h3>You do not have added servers in SMON service. Create you first server <a href="smon.py?action=add" title="HAProxy-WI SMON" target="_blank">here</a> before use</h3>
|
||||
<br />
|
||||
<iframe width="860" height="515" src="https://www.youtube.com/embed/bJtRJeHG5B0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
// Ion.Sound | version 3.0.7 | https://github.com/IonDen/ion.sound
|
||||
(function(l,e,n,r){l.ion=l.ion||{};if(!ion.sound){var m=function(a){a||(a="undefined");if(l.console){console.warn&&"function"===typeof console.warn?console.warn(a):console.log&&"function"===typeof console.log&&console.log(a);var g=n&&n("#debug");if(g&&g.length){var b=g.html();g.html(b+a+"<br/>")}}},f=function(a,b){var c;b=b||{};for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b};if("function"!==typeof Audio&&"object"!==typeof Audio)e=function(){m("HTML5 Audio is not supported in this browser")},
|
||||
ion.sound=e,ion.sound.play=e,ion.sound.stop=e,ion.sound.pause=e,ion.sound.preload=e,ion.sound.destroy=e,e();else{e=/iPad|iPhone|iPod/.test(e.appVersion);var q=0,c={},d={},b;!c.supported&&e?c.supported=["mp3","mp4","aac"]:c.supported||(c.supported=["mp3","ogg","mp4","aac","wav"]);ion.sound=function(a){f(a,c);c.path=c.path||"";c.volume=c.volume||1;c.preload=c.preload||!1;c.multiplay=c.multiplay||!1;c.loop=c.loop||!1;c.sprite=c.sprite||null;c.scope=c.scope||null;c.ready_callback=c.ready_callback||null;
|
||||
c.ended_callback=c.ended_callback||null;if(q=c.sounds.length)for(b=0;b<q;b++){a=c.sounds[b];var g=a.alias||a.name;d[g]||(d[g]=new p(a),d[g].init())}else m("No sound-files provided!")};ion.sound.VERSION="3.0.7";ion.sound._method=function(a,c,e){if(c)d[c]&&d[c][a](e);else for(b in d)if(d.hasOwnProperty(b)&&d[b])d[b][a](e)};ion.sound.preload=function(a,b){b=b||{};f({preload:!0},b);ion.sound._method("init",a,b)};ion.sound.destroy=function(a){ion.sound._method("destroy",a);if(a)d[a]=null;else for(b in d)d.hasOwnProperty(b)&&
|
||||
d[b]&&(d[b]=null)};ion.sound.play=function(a,b){ion.sound._method("play",a,b)};ion.sound.stop=function(a,b){ion.sound._method("stop",a,b)};ion.sound.pause=function(a,b){ion.sound._method("pause",a,b)};ion.sound.volume=function(a,b){ion.sound._method("volume",a,b)};n&&(n.ionSound=ion.sound);e=l.AudioContext||l.webkitAudioContext;var h;e&&(h=new e);var p=function(a){this.options=f(c);delete this.options.sounds;f(a,this.options);this.request=null;this.streams={};this.result={};this.ext=0;this.url="";
|
||||
this.autoplay=this.no_file=this.decoded=this.loaded=!1};p.prototype={init:function(a){a&&f(a,this.options);this.options.preload&&this.load()},destroy:function(){var a;for(b in this.streams)(a=this.streams[b])&&a.destroy();this.streams={};this.result=null;this.options=this.options.buffer=null;this.request&&(this.request.removeEventListener("load",this.ready.bind(this),!1),this.request.removeEventListener("error",this.error.bind(this),!1),this.request.abort(),this.request=null)},createUrl:function(){var a=
|
||||
(new Date).valueOf();this.url=this.options.path+encodeURIComponent(this.options.name)+"."+this.options.supported[this.ext]+"?"+a},load:function(){this.no_file?m('No sources for "'+this.options.name+'" sound :('):this.request||(this.createUrl(),this.request=new XMLHttpRequest,this.request.open("GET",this.url,!0),this.request.responseType="arraybuffer",this.request.addEventListener("load",this.ready.bind(this),!1),this.request.addEventListener("error",this.error.bind(this),!1),this.request.send())},
|
||||
reload:function(){this.ext++;this.options.supported[this.ext]?this.load():(this.no_file=!0,m('No sources for "'+this.options.name+'" sound :('))},ready:function(a){this.result=a.target;4!==this.result.readyState?this.reload():200!==this.result.status&&0!==this.result.status?(m(this.url+" was not found on server!"),this.reload()):(this.request.removeEventListener("load",this.ready.bind(this),!1),this.request.removeEventListener("error",this.error.bind(this),!1),this.request=null,this.loaded=!0,this.decode())},
|
||||
decode:function(){h&&h.decodeAudioData(this.result.response,this.setBuffer.bind(this),this.error.bind(this))},setBuffer:function(a){this.options.buffer=a;this.decoded=!0;a={name:this.options.name,alias:this.options.alias,ext:this.options.supported[this.ext],duration:this.options.buffer.duration};this.options.ready_callback&&"function"===typeof this.options.ready_callback&&this.options.ready_callback.call(this.options.scope,a);if(this.options.sprite)for(b in this.options.sprite)this.options.start=
|
||||
this.options.sprite[b][0],this.options.end=this.options.sprite[b][1],this.streams[b]=new k(this.options,b);else this.streams[0]=new k(this.options);this.autoplay&&(this.autoplay=!1,this.play())},error:function(){this.reload()},play:function(a){delete this.options.part;a&&f(a,this.options);if(!this.loaded)this.autoplay=!0,this.load();else if(!this.no_file&&this.decoded)if(this.options.sprite)if(this.options.part)this.streams[this.options.part].play(this.options);else for(b in this.options.sprite)this.streams[b].play(this.options);
|
||||
else this.streams[0].play(this.options)},stop:function(a){if(this.options.sprite)if(a)this.streams[a.part].stop();else for(b in this.options.sprite)this.streams[b].stop();else this.streams[0].stop()},pause:function(a){if(this.options.sprite)if(a)this.streams[a.part].pause();else for(b in this.options.sprite)this.streams[b].pause();else this.streams[0].pause()},volume:function(a){if(a)if(f(a,this.options),this.options.sprite)if(this.options.part)(a=this.streams[this.options.part])&&a.setVolume(this.options);
|
||||
else for(b in this.options.sprite)(a=this.streams[b])&&a.setVolume(this.options);else(a=this.streams[0])&&a.setVolume(this.options)}};var k=function(a,b){this.alias=a.alias;this.name=a.name;this.sprite_part=b;this.buffer=a.buffer;this.start=a.start||0;this.end=a.end||this.buffer.duration;this.multiplay=a.multiplay||!1;this.volume=a.volume||1;this.scope=a.scope;this.ended_callback=a.ended_callback;this.setLoop(a);this.gain=this.source=null;this.paused=this.playing=!1;this.time_offset=this.time_played=
|
||||
this.time_ended=this.time_started=0};k.prototype={destroy:function(){this.stop();this.source=this.buffer=null;this.gain&&this.gain.disconnect();this.source&&this.source.disconnect();this.source=this.gain=null},setLoop:function(a){this.loop=!0===a.loop?9999999:"number"===typeof a.loop?+a.loop-1:!1},update:function(a){this.setLoop(a);"volume"in a&&(this.volume=a.volume)},play:function(a){a&&this.update(a);if(this.multiplay||!this.playing)this.gain=h.createGain(),this.source=h.createBufferSource(),this.source.buffer=
|
||||
this.buffer,this.source.connect(this.gain),this.gain.connect(h.destination),this.gain.gain.value=this.volume,this.source.onended=this.ended.bind(this),this._play()},_play:function(){var a,b;this.paused?(a=this.start+this.time_offset,b=this.end-this.time_offset):(a=this.start,b=this.end);0>=b?this.clear():("function"===typeof this.source.start?this.source.start(0,a,b):this.source.noteOn(0,a,b),this.playing=!0,this.paused=!1,this.time_started=(new Date).valueOf())},stop:function(){this.playing&&this.source&&
|
||||
("function"===typeof this.source.stop?this.source.stop(0):this.source.noteOff(0));this.clear()},pause:function(){this.paused?this.play():this.playing&&(this.source&&this.source.stop(0),this.paused=!0)},ended:function(){this.playing=!1;this.time_ended=(new Date).valueOf();this.time_played=(this.time_ended-this.time_started)/1E3;this.time_offset+=this.time_played;if(this.time_offset>=this.end||.015>this.end-this.time_offset)this._ended(),this.clear(),this.loop&&(this.loop--,this.play())},_ended:function(){var a=
|
||||
{name:this.name,alias:this.alias,part:this.sprite_part,start:this.start,duration:this.end};this.ended_callback&&"function"===typeof this.ended_callback&&this.ended_callback.call(this.scope,a)},clear:function(){this.time_offset=this.time_played=0;this.playing=this.paused=!1},setVolume:function(a){this.volume=a.volume;this.gain&&(this.gain.gain.value=this.volume)}};h||(function(){var a=new Audio,b=a.canPlayType("audio/mpeg"),e=a.canPlayType("audio/ogg"),a=a.canPlayType('audio/mp4; codecs="mp4a.40.2"'),
|
||||
d,f;for(f=0;f<c.supported.length;f++)d=c.supported[f],b||"mp3"!==d||c.supported.splice(f,1),e||"ogg"!==d||c.supported.splice(f,1),a||"aac"!==d||c.supported.splice(f,1),a||"mp4"!==d||c.supported.splice(f,1)}(),p.prototype={init:function(a){a&&f(a,this.options);this.inited=!0;this.options.preload&&this.load()},destroy:function(){var a;for(b in this.streams)(a=this.streams[b])&&a.destroy();this.streams={};this.inited=this.loaded=!1},load:function(){var a;this.options.preload=!0;this.options._ready=this.ready;
|
||||
this.options._scope=this;if(this.options.sprite)for(b in this.options.sprite)a=this.options.sprite[b],this.options.start=a[0],this.options.end=a[1],this.streams[b]=new k(this.options,b);else this.streams[0]=new k(this.options)},ready:function(a){this.loaded||(this.loaded=!0,a={name:this.options.name,alias:this.options.alias,ext:this.options.supported[this.ext],duration:a},this.options.ready_callback&&"function"===typeof this.options.ready_callback&&this.options.ready_callback.call(this.options.scope,
|
||||
a),this.autoplay&&(this.autoplay=!1,this.play()))},play:function(a){if(this.inited)if(delete this.options.part,a&&f(a,this.options),console.log(1),this.loaded)if(this.options.sprite)if(this.options.part)this.streams[this.options.part].play(this.options);else for(b in this.options.sprite)this.streams[b].play(this.options);else this.streams[0].play(this.options);else this.options.preload?this.autoplay=!0:(this.autoplay=!0,this.load())},stop:function(a){if(this.inited)if(this.options.sprite)if(a)this.streams[a.part].stop();
|
||||
else for(b in this.options.sprite)this.streams[b].stop();else this.streams[0].stop()},pause:function(a){if(this.inited)if(this.options.sprite)if(a)this.streams[a.part].pause();else for(b in this.options.sprite)this.streams[b].pause();else this.streams[0].pause()},volume:function(a){if(a)if(f(a,this.options),this.options.sprite)if(this.options.part)(a=this.streams[this.options.part])&&a.setVolume(this.options);else for(b in this.options.sprite)(a=this.streams[b])&&a.setVolume(this.options);else(a=
|
||||
this.streams[0])&&a.setVolume(this.options)}},k=function(a,b){this.name=a.name;this.alias=a.alias;this.sprite_part=b;this.multiplay=a.multiplay;this.volume=a.volume;this.preload=a.preload;this.path=c.path;this.start=a.start||0;this.end=a.end||0;this.scope=a.scope;this.ended_callback=a.ended_callback;this._scope=a._scope;this._ready=a._ready;this.setLoop(a);this.url=this.sound=null;this.loaded=!1;this.played_time=this.paused_time=this.start_time=0;this.init()},k.prototype={init:function(){this.sound=
|
||||
new Audio;this.sound.volume=this.volume;this.createUrl();this.sound.addEventListener("ended",this.ended.bind(this),!1);this.sound.addEventListener("canplaythrough",this.can_play_through.bind(this),!1);this.sound.addEventListener("timeupdate",this._update.bind(this),!1);this.load()},destroy:function(){this.stop();this.sound.removeEventListener("ended",this.ended.bind(this),!1);this.sound.removeEventListener("canplaythrough",this.can_play_through.bind(this),!1);this.sound.removeEventListener("timeupdate",
|
||||
this._update.bind(this),!1);this.sound=null;this.loaded=!1},createUrl:function(){var a=(new Date).valueOf();this.url=this.path+encodeURIComponent(this.name)+"."+c.supported[0]+"?"+a},can_play_through:function(){this.preload&&this.ready()},load:function(){this.sound.src=this.url;this.sound.preload=this.preload?"auto":"none";this.preload&&this.sound.load()},setLoop:function(a){this.loop=!0===a.loop?9999999:"number"===typeof a.loop?+a.loop-1:!1},update:function(a){this.setLoop(a);"volume"in a&&(this.volume=
|
||||
a.volume)},ready:function(){!this.loaded&&this.sound&&(this.loaded=!0,this._ready.call(this._scope,this.sound.duration),this.end||(this.end=this.sound.duration))},play:function(a){a&&this.update(a);!this.multiplay&&this.playing||this._play()},_play:function(){if(this.paused)this.paused=!1;else try{this.sound.currentTime=this.start}catch(a){}this.playing=!0;this.start_time=(new Date).valueOf();this.sound.volume=this.volume;this.sound.play()},stop:function(){if(this.playing){this.paused=this.playing=
|
||||
!1;this.sound.pause();this.clear();try{this.sound.currentTime=this.start}catch(a){}}},pause:function(){this.paused?this._play():(this.playing=!1,this.paused=!0,this.sound.pause(),this.paused_time=(new Date).valueOf(),this.played_time+=this.paused_time-this.start_time)},_update:function(){this.start_time&&(this.played_time+((new Date).valueOf()-this.start_time))/1E3>=this.end&&this.playing&&(this.stop(),this._ended())},ended:function(){this.playing&&(this.stop(),this._ended())},_ended:function(){this.playing=
|
||||
!1;var a={name:this.name,alias:this.alias,part:this.sprite_part,start:this.start,duration:this.end};this.ended_callback&&"function"===typeof this.ended_callback&&this.ended_callback.call(this.scope,a);this.loop&&setTimeout(this.looper.bind(this),15)},looper:function(){this.loop--;this.play()},clear:function(){this.paused_time=this.played_time=this.start_time=0},setVolume:function(a){this.volume=a.volume;this.sound&&(this.sound.volume=this.volume)}})}}})(window,navigator,window.jQuery||window.$);
|
|
@ -1153,4 +1153,63 @@ function checkLength( o, n, min ) {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
$(function () {
|
||||
ion.sound({
|
||||
sounds: [
|
||||
{
|
||||
name: "bell_ring",
|
||||
},
|
||||
{
|
||||
name: "glass",
|
||||
volume: 1,
|
||||
},
|
||||
{
|
||||
name: "alert_sound",
|
||||
volume: 0.3,
|
||||
preload: false
|
||||
}
|
||||
],
|
||||
volume: 0.5,
|
||||
path: "/inc/sounds/",
|
||||
preload: true
|
||||
});
|
||||
});
|
||||
async function waitConsumer() {
|
||||
cur_url = window.location.href.split('/').pop();
|
||||
cur_url = cur_url.split('?');
|
||||
if (cur_url[0] != 'servers.py#installproxy' && cur_url[0] != 'servers.py#installmon' &&
|
||||
cur_url[0] != 'users.py#installmon' && cur_url[0] != 'ha.py' &&
|
||||
cur_url[0] != 'add.py?service=nginx#ssl' && cur_url[0] != 'add.py#ssl') {
|
||||
NProgress.configure({showSpinner: false});
|
||||
$.ajax({
|
||||
url: "options.py",
|
||||
data: {
|
||||
alert_consumer: '1',
|
||||
token: $('#token').val()
|
||||
},
|
||||
type: "POST",
|
||||
success: function (data) {
|
||||
data = data.split(";");
|
||||
for (i = 0; i < data.length; i++) {
|
||||
if (data[i].indexOf('error:') != '-1' || data[i].indexOf('alert') != '-1' || data[i].indexOf('FAILED') != '-1') {
|
||||
if (data[i].indexOf('error: database is locked') == '-1') {
|
||||
toastr.error(data[i]);
|
||||
ion.sound.play("bell_ring");
|
||||
}
|
||||
} else if (data[i].indexOf('info: ') != '-1') {
|
||||
toastr.info(data[i]);
|
||||
ion.sound.play("glass");
|
||||
} else if (data[i].indexOf('success: ') != '-1') {
|
||||
toastr.success(data[i]);
|
||||
ion.sound.play("glass");
|
||||
} else if (data[i].indexOf('warning: ') != '-1') {
|
||||
toastr.warning(data[i]);
|
||||
ion.sound.play("bell_ring");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
NProgress.configure({showSpinner: true});
|
||||
}
|
||||
}
|
||||
setInterval(waitConsumer, 20000);
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
<script src="/inc/codemirror/haproxy.js"></script>
|
||||
<link href="/inc/toastr.css" rel="stylesheet"/>
|
||||
<script src="/inc/toastr.js"></script>
|
||||
<script defer src="/inc/ion.sound.min.js"></script>
|
||||
<meta http-equiv="refresh" content="0; url=/app/overview.py" />
|
||||
</head>
|
||||
<body style="background-color: #239dee;">
|
||||
|
|
Loading…
Reference in New Issue