Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Vladislav Rykov
THSO.server
Commits
efd170e7
Commit
efd170e7
authored
May 14, 2020
by
Vladislav Rykov
Browse files
alert internal logic done
parent
c18005e8
Changes
12
Hide whitespace changes
Inline
Side-by-side
app/app/__pycache__/views.cpython-37.pyc
View file @
efd170e7
No preview for this file type
app/app/dao/notification/__pycache__/notification.cpython-37.pyc
View file @
efd170e7
No preview for this file type
app/app/dao/notification/notification.py
View file @
efd170e7
...
...
@@ -13,7 +13,7 @@ def create(cur, nid, appkey, devid, name, desc, action_type, action):
return
(
True
,)
@
with_psql
def
delete
(
cur
,
appkey
,
nid
):
def
delete
(
cur
,
appkey
,
nid
,
devid
):
query
=
"""
DELETE FROM
notifications
...
...
@@ -21,8 +21,10 @@ def delete(cur, appkey, nid):
id = %s
AND
app_key = %s
AND
dev_id = %s
"""
cur
.
execute
(
query
,
(
nid
,
appkey
))
cur
.
execute
(
query
,
(
nid
,
appkey
,
devid
))
return
(
True
,)
...
...
app/app/dao/notification_queue/__pycache__/__init__.cpython-37.pyc
0 → 100644
View file @
efd170e7
File added
app/app/dao/notification_queue/__pycache__/notification_queue.cpython-37.pyc
0 → 100644
View file @
efd170e7
File added
app/app/dao/notification_queue/notification_queue.py
View file @
efd170e7
...
...
@@ -44,6 +44,17 @@ def get(cur, appkey, nid):
else
:
return
(
True
,
nf
)
@
with_psql
def
delete_list
(
cur
,
appkey
):
query
=
"""
DELETE FROM
notifications_queue
WHERE
app_key = %s
"""
cur
.
execute
(
query
,
(
appkey
,))
return
(
True
,)
@
with_psql
def
get_all
(
cur
):
...
...
app/app/
templates/public/.new-alert.html
.swp
→
app/app/
dao/trigger/.trigger.py
.swp
View file @
efd170e7
No preview for this file type
app/app/dao/trigger/__pycache__/trigger.cpython-37.pyc
View file @
efd170e7
No preview for this file type
app/app/dao/trigger/trigger.py
View file @
efd170e7
...
...
@@ -3,39 +3,33 @@ import ast
# expr has a form of list [variable, operand, value]
@
with_psql
def
create
(
cur
,
appkey
,
devid
,
nfid
,
expr
):
res
=
create_function
(
appkey
,
devid
,
nfid
,
expr
)
if
res
[
0
]:
query
=
"""
CREATE TRIGGER tr_{}_{}_{}
AFTER INSERT
ON dev_{}_{}
FOR EACH ROW
EXECUTE PROCEDURE nf_{}_{}_{}()
"""
.
format
(
appkey
,
devid
,
nfid
,
appkey
,
devid
,
appkey
,
devid
,
nfid
)
def
create
(
cur
,
appkey
,
devid
,
nfid
):
query
=
"""
CREATE TRIGGER tr_{}_{}_{}
AFTER INSERT
ON dev_{}_{}
FOR EACH ROW
EXECUTE PROCEDURE nf_{}_{}_{}()
"""
.
format
(
appkey
,
devid
,
nfid
,
appkey
,
devid
,
appkey
,
devid
,
nfid
)
cur
.
execute
(
query
)
return
(
True
,)
return
res
cur
.
execute
(
query
)
return
(
True
,)
@
with_psql
def
delete
(
cur
,
appkey
,
devid
,
nfid
):
res
=
delete_function
(
appkey
,
devid
,
nfid
)
query
=
"""
DROP TRIGGER
tr_{}_{}_{}
ON dev_{}_{}
"""
.
format
(
appkey
,
devid
,
nfid
,
appkey
,
devid
)
if
res
[
0
]:
query
=
"""
DROP TRIGGER
tr_{}_{}_{}
"""
.
format
(
appkey
,
devid
,
nfid
)
cur
.
execute
(
query
)
return
(
True
,)
return
res
cur
.
execute
(
query
)
return
(
True
,)
# expr has a form of list [variable, operand, value]
@
with_psql
...
...
@@ -48,23 +42,15 @@ def create_function(cur, appkey, devid, nfid, expr):
BEGIN
"""
.
format
(
appkey
,
devid
,
nfid
)
if
expr
[
1
]
==
'CHANGES'
:
query
+=
"""
query
+=
"""
IF (NEW.data->>'{}')::{} {} {} THEN
INSERT INTO
notifications_queue
VALUES
({},{},{})
"""
.
format
(
nfid
,
appkey
,
devid
)
else
:
query
+=
"""
IF (NEW data->>'{}')::{} {} {} THEN
INSERT INTO
notifications_queue
VALUES
({},{},{});
END IF;
"""
.
format
(
expr
[
0
],
get_type
(
expr
[
2
]),
expr
[
1
],
expr
[
2
],
ndif
,
appkey
,
devid
)
('{}','{}',{});
END IF;
"""
.
format
(
expr
[
0
],
get_type
(
expr
[
2
]),
expr
[
1
],
expr
[
2
],
nfid
,
appkey
,
devid
)
query
+=
"""
RETURN NEW;
...
...
@@ -75,7 +61,6 @@ def create_function(cur, appkey, devid, nfid, expr):
COST 100;
"""
print
(
query
)
cur
.
execute
(
query
)
return
(
True
,
)
...
...
@@ -86,7 +71,7 @@ def delete_function(cur, appkey, devid, nfid):
query
=
"""
DROP FUNCTION nf_{}_{}_{}()
"""
.
format
(
appkey
,
devid
,
nfid
)
cur
.
execute
(
query
)
return
(
True
,)
...
...
@@ -99,9 +84,13 @@ def delete_function(cur, appkey, devid, nfid):
# str -> text
def
get_type
(
tstr
):
tstr
=
tstr
.
strip
()
if
tstr
==
'true'
:
tstr
=
'True'
elif
tstr
==
'false'
:
tstr
=
'False'
try
:
# int, float, bool
t
=
ast
.
literal_eval
(
tstr
).
__name__
t
=
type
(
ast
.
literal_eval
(
tstr
)
)
.
__name__
except
:
t
=
'text'
...
...
app/app/templates/public/alerts.html
View file @
efd170e7
...
...
@@ -25,7 +25,7 @@
<tr>
<th>
{{ a[3] }}
</th>
<th>
{{ a[4] }}
</th>
<th>
<a
href=
"/alert-rm?id={{ a[0] }}"
>
<span
class=
"glyphicon glyphicon-remove"
</
span
>
</a>
</th>
<th>
<a
href=
"/alert-rm?id={{ a[0]
}}&devid={{ a[2]
}}"
>
<span
class=
"glyphicon glyphicon-remove"
</
span
>
</a>
</th>
</tr>
{% endfor %}
</tbody>
...
...
app/app/templates/public/new-alert.html
View file @
efd170e7
...
...
@@ -72,23 +72,14 @@
}
function
onvar
()
{
if
(
!
document
.
getElementById
(
"
operation
"
))
{
$
(
"
#alertform
"
).
append
(
"
<select class='form-control notifelem' name='operation' id='operation' onchange='onop()' required><option default>CHANGES</option><option>></option><option>>=</option><option><</option><option><=</option><option>==</option></select>
"
);
$
(
"
#alertform
"
).
append
(
"
<select class='form-control notifelem' name='operation' id='operation' required><option default>></option><option>>=</option><option><</option><option><=</option><option>=</option></select>
"
);
$
(
"
#alertform
"
).
append
(
"
<input type='numeric' class='form-control notifelem' name='avalue' id='avalue' placeholder='Value' required>
"
);
}
else
{
var
var_sel
=
document
.
getElementById
(
"
varname
"
);
var
sel_var
=
var_sel
.
options
[
var_sel
.
selectedIndex
].
value
;
if
(
sel_var
==
"
-
"
)
{
$
(
"
#operation
"
).
remove
();
}
}
}
function
onop
()
{
var
op_sel
=
document
.
getElementById
(
"
operation
"
);
var
sel_op
=
op_sel
.
options
[
op_sel
.
selectedIndex
].
text
;
if
(
sel_op
!=
"
CHANGES
"
&&
!
document
.
getElementById
(
"
avalue
"
))
{
$
(
"
#alertform
"
).
append
(
"
<input type='numeric' class='form-control notifelem' name='avalue' id='avalue' placeholder='Value' required>
"
);
}
else
{
if
(
document
.
getElementById
(
"
avalue
"
))
{
$
(
"
#avalue
"
).
remove
();
$
(
"
#operation
"
).
remove
();
}
}
}
...
...
app/app/views.py
View file @
efd170e7
...
...
@@ -10,6 +10,7 @@ import app.dao.pend.pend as pend
import
app.dao.data.data
as
data
import
app.dao.notification.notification
as
nfs
import
app.dao.trigger.trigger
as
tr
import
app.dao.notification_queue.notification_queue
as
nq
import
app.helpers.misc
as
misc
...
...
@@ -542,22 +543,24 @@ def alert():
# create new notification
nid
=
misc
.
rand_str
(
app
.
config
[
'NID_LENGTH'
]).
decode
(
'utf-8'
)
dev
=
dd
.
get
(
session
[
'appkey'
],
request
.
form
[
'devid'
])
try
:
desc_ext
=
request
.
form
[
'alertdesc'
]
+
' (Application '
+
session
[
'appname'
]
+
' => '
+
dev
[
1
][
0
]
+
'.'
+
request
.
form
[
'varname'
]
+
' '
+
request
.
form
[
'operation'
]
+
' '
+
request
.
form
[
'avalue'
]
+
')'
except
:
desc_ext
=
request
.
form
[
'alertdesc'
]
+
' (Application '
+
session
[
'appname'
]
+
' => '
+
dev
[
1
][
0
]
+
'.'
+
request
.
form
[
'varname'
]
+
' '
+
request
.
form
[
'operation'
]
+
')'
avalue
=
''
desc_ext
=
request
.
form
[
'alertdesc'
]
+
' (Application '
+
session
[
'appname'
]
+
' => '
+
dev
[
1
][
0
]
+
'.'
+
request
.
form
[
'varname'
]
+
' '
+
request
.
form
[
'operation'
]
if
request
.
form
[
'operation'
]
==
'CHANGES'
:
desc_ext
+=
')'
else
:
desc_ext
+=
' '
+
request
.
form
[
'avalue'
]
+
')'
res
=
nfs
.
create
(
nid
,
session
[
'appkey'
],
request
.
form
[
'devid'
],
request
.
form
[
'alertname'
],
desc_ext
,
'alert'
,
request
.
form
[
'alertemail'
])
if
res
[
0
]:
print
(
'notification created'
)
# create new function and trigger
tr
.
create_function
(
session
[
'appkey'
],
request
.
form
[
'devid'
],
nid
,
[
request
.
form
[
'varname'
],
request
.
form
[
'operation'
],
avalue
])
tr
.
create
(
session
[
'appkey'
],
request
.
form
[
'devid'
],
nid
)
return
redirect
(
url_for
(
'alerts'
))
else
:
flash
(
'Error creating new notification: {}'
.
format
(
res
[
1
]),
'danger'
)
return
redirect
(
url_for
(
'alerts'
))
# create new function and trigger
else
:
return
redirect
(
url_for
(
'index'
))
else
:
...
...
@@ -566,7 +569,10 @@ def alert():
@
app
.
route
(
'/alert-rm'
)
def
alarm_rm
():
if
'name'
in
session
:
res
=
nfs
.
delete
(
session
[
'appkey'
],
request
.
args
.
get
(
'id'
))
nq
.
delete_list
(
session
[
'appkey'
])
tr
.
delete
(
session
[
'appkey'
],
request
.
args
.
get
(
'devid'
),
request
.
args
.
get
(
'id'
))
tr
.
delete_function
(
session
[
'appkey'
],
request
.
args
.
get
(
'devid'
),
request
.
args
.
get
(
'id'
))
res
=
nfs
.
delete
(
session
[
'appkey'
],
request
.
args
.
get
(
'id'
),
request
.
args
.
get
(
'devid'
))
if
res
[
0
]:
flash
(
'Alert removed'
,
'success'
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment