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
a8aee891
Commit
a8aee891
authored
Oct 07, 2020
by
Vladislav Rykov
Browse files
map view fully added
parent
8bae9d72
Changes
9
Hide whitespace changes
Inline
Side-by-side
app/app.log
View file @
a8aee891
...
...
@@ -9,3 +9,4 @@
[2020-10-01 15:11:55,695] INFO in views: superuser admin deleted for application 8cc6f4b1 device 2
[2020-10-07 17:18:50,561] INFO in views: Logged in superuser admin
[2020-10-07 17:19:21,368] INFO in views: Logged in superuser admin
[2020-10-07 19:11:04,501] INFO in views: superuser admin added new device testgeo for application 8cc6f4b1
app/app/__pycache__/views.cpython-37.pyc
View file @
a8aee891
No preview for this file type
app/app/dao/device/__pycache__/device.cpython-37.pyc
View file @
a8aee891
No preview for this file type
app/app/dao/device/device.py
View file @
a8aee891
...
...
@@ -128,7 +128,13 @@ def get_list(cur, appkey):
"""
cur
.
execute
(
sql
.
SQL
(
query
).
format
(
sql
.
Identifier
(
tn
)))
return
(
True
,
cur
.
fetchall
())
devlist
=
cur
.
fetchall
()
for
i
in
range
(
len
(
devlist
)):
devlist
[
i
]
=
[
d
for
d
in
devlist
[
i
]]
devlist
[
i
][
3
]
=
json
.
loads
(
devlist
[
i
][
3
].
tobytes
())
return
(
True
,
devlist
)
@
with_psql
...
...
app/app/dao/misc/__pycache__/misc.cpython-37.pyc
View file @
a8aee891
No preview for this file type
app/app/dao/misc/misc.py
View file @
a8aee891
from
psycopg2
import
sql
import
app.helpers.device_data_model
as
ddm
from
app.helpers.misc
import
with_psql
,
utc_roundhour
,
utc_roundday
,
utc_local_diff
import
app.dao.application.application
as
ad
import
app.dao.device.device
as
dd
import
app.dao.data.data
as
data
import
json
# appkeys is a list of tuples [(app1), (app2), ..., (appn)]
# devids is a list of lists of tuples [[(dev1),...],[(dev1),...]]
...
...
@@ -174,13 +177,21 @@ def get_recent_activity(cur, username, n=5):
else
:
return
(
True
,
[])
@
with_psql
def
get_devices_locations
(
cur
,
username
):
def
get_devices_locations
(
username
):
devlocs
=
{}
apps
=
ad
.
get_list
(
username
)[
1
]
for
a
in
apps
:
devs
=
dd
.
get_list
(
a
[
1
])[
1
]
print
(
devs
)
devs
=
[
d
for
d
in
devs
if
all
(
k
in
d
[
3
][
'format'
]
for
k
in
(
'lat'
,
'lon'
))]
if
devs
!=
[]:
for
d
in
devs
:
ddata
=
data
.
get_last_n
(
a
[
1
],
d
[
1
],
1
)
if
ddata
[
0
]:
devlocs
[
a
[
1
]]
=
{
int
(
d
[
1
])
:
{}}
ddata
=
ddm
.
decode_datum
(
ddata
[
1
][
0
],
d
[
3
])
#decodify the data and put it into the dict
devlocs
[
a
[
1
]][
int
(
d
[
1
])].
update
({
'appname'
:
a
[
0
],
'devname'
:
d
[
0
],
'utc'
:
int
(
ddata
[
0
]),
'lat'
:
ddata
[
2
][
'lat'
],
'lon'
:
ddata
[
2
][
'lon'
]})
return
devlocs
app/app/helpers/device_data_model.py
View file @
a8aee891
...
...
@@ -2,9 +2,6 @@ import msgpack
import
struct
from
collections
import
OrderedDict
import
json
import
app.helpers.misc
as
misc
from
psycopg2
import
Binary
from
datetime
import
datetime
MODELS
=
{
'json'
:
'JSON'
,
...
...
@@ -95,36 +92,6 @@ def test_done():
}
print
(
read_data_ddm
(
rdata
,
ddm
))
@
misc
.
with_psql
def
mpack_test
(
cur
):
import
random
m
=
{
"temperature"
:
random
.
randint
(
0
,
100
),
"lever"
:
random
.
randint
(
0
,
1
)
}
m
=
msgpack
.
packb
(
m
)
query
=
"""
INSERT INTO dev_3b56f3d8_3 VALUES ({}, '{}', {})
"""
.
format
(
misc
.
get_utc
(),
datetime
.
now
().
strftime
(
'%H:%M:%S'
),
Binary
(
m
))
cur
.
execute
(
query
)
return
(
True
,)
@
misc
.
with_psql
def
raw_test
(
cur
):
import
random
upstr
=
'<fQ20s?h'
m
=
struct
.
pack
(
upstr
,
random
.
random
()
*
1000
,
random
.
randint
(
10000
,
10000000
),
'hello'
.
encode
(
'utf-8'
),
random
.
randint
(
0
,
2
),
random
.
randint
(
0
,
30000
))
query
=
"""
INSERT INTO dev_3b56f3d8_2 VALUES ({}, '{}', {})
"""
.
format
(
misc
.
get_utc
(),
datetime
.
now
().
strftime
(
'%H:%M:%S'
),
Binary
(
m
))
cur
.
execute
(
query
)
return
(
True
,)
def
decode_datum
(
data
,
ddm
):
data
=
[
d
for
d
in
data
]
...
...
app/app/templates/views/public/map.html
View file @
a8aee891
...
...
@@ -105,12 +105,26 @@
crossorigin=
""
>
</script>
<script
type=
"text/javascript"
>
var
devslocs
=
JSON
.
parse
(
'
{{ devslocs | safe }}
'
);
var
devmap
=
L
.
map
(
'
map
'
).
setView
([
50
,
50
],
2
);
L
.
tileLayer
(
'
https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
'
,
{
attribution
:
'
Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>
'
,
maxZoom
:
18
}).
addTo
(
devmap
);
Object
.
entries
(
devslocs
).
forEach
(([
appkey
,
devdata
])
=>
{
applink
=
"
/application/
"
+
appkey
;
Object
.
entries
(
devdata
).
forEach
(([
devid
,
data
])
=>
{
devlink
=
applink
+
"
/device/
"
+
devid
;
var
devmarker
=
L
.
marker
([
data
[
"
lat
"
],
data
[
"
lon
"
]]).
addTo
(
devmap
);
var
popuptxt
=
"
<b> Application: <a href='
"
+
applink
+
"
'>
"
+
data
[
"
appname
"
]
+
"
</a></b><br>
"
;
popuptxt
+=
"
<b> Device: <a href='
"
+
devlink
+
"
'>
"
+
data
[
"
devname
"
]
+
"
</a></b><br>
"
;
var
dateutc
=
new
Date
(
data
[
"
utc
"
]
*
1000
);
popuptxt
+=
"
<b>Timestamp: </b>
"
+
dateutc
.
toString
();
devmarker
.
bindPopup
(
popuptxt
).
openPopup
();
});
});
</script>
{% endblock %}
app/app/views.py
View file @
a8aee891
...
...
@@ -659,6 +659,6 @@ def map():
last_activity
=
md
.
get_user_data_count_per_day
(
session
[
'name'
])[
1
][
0
]
info
=
[
created_apps
,
active_devices
,
total_activity
,
last_activity
]
return
render_template
(
'views/public/map.html'
,
info
=
info
)
devslocs
=
md
.
get_devices_locations
(
session
[
'name'
])
import
json
return
render_template
(
'views/public/map.html'
,
info
=
info
,
devslocs
=
json
.
dumps
(
devslocs
)
)
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