Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F62567876
queryrange.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Tue, May 14, 01:27
Size
3 KB
Mime Type
text/x-python
Expires
Thu, May 16, 01:27 (2 d)
Engine
blob
Format
Raw Data
Handle
17663518
Attached To
R11586 sausage-api
queryrange.py
View Options
# © All rights reserved. ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE,
# Switzerland
# SCITAS - Scientific IT and Application Support, 2021
# See the LICENSE.txt file for more details.
import
falcon
from
datetime
import
datetime
from
sausage.esoperations
import
ESOp
from
sausage.esquery
import
ESQuery
from
sausage.loadconf
import
LoadConf
from
sausage.readconf
import
ReadConf
class
QueryRange
(
object
):
def
__init__
(
self
):
self
.
stamp
=
""
newconf
=
LoadConf
()
self
.
currencies
=
newconf
.
currencies
server_opt
=
ReadConf
()
self
.
es_server
=
server_opt
.
es_server
def
get_es_data
(
self
,
entity
,
start
,
end
,
item
):
self
.
cache
.
update
({
item
+
'-'
+
self
.
stamp
:
{
"name"
:
item
,
"timestamp"
:
self
.
timestamp
}
})
for
currency
in
self
.
currencies
:
oqueries
=
ESQuery
(
currency
,
entity
,
start
,
end
,
item
)
self
.
doc
=
oqueries
.
query
query
=
ESOp
(
self
.
es_server
)
esdata
=
query
.
esget
(
"slurm"
,
self
.
doc
)
if
entity
==
"account"
:
for
cluster
in
esdata
[
'aggregations'
][
'cluster'
][
'buckets'
]:
if
self
.
cache
[
item
+
'-'
+
self
.
stamp
]
.
get
(
cluster
[
"key"
])
is
None
:
self
.
cache
[
item
+
'-'
+
self
.
stamp
]
.
update
({
cluster
[
"key"
]:
{
}
})
self
.
cache
[
item
+
'-'
+
self
.
stamp
][
cluster
[
"key"
]
][
currency
]
=
cluster
[
"cost"
][
"value"
]
elif
entity
==
"user"
:
for
account
in
esdata
[
'aggregations'
][
'account'
][
'buckets'
]:
if
self
.
cache
[
item
+
'-'
+
self
.
stamp
]
.
get
(
account
[
"key"
])
is
None
:
self
.
cache
[
item
+
'-'
+
self
.
stamp
]
.
update
({
account
[
"key"
]:
{
}
})
for
cluster
in
account
[
'cluster'
][
'buckets'
]:
if
self
.
cache
[
item
+
'-'
+
self
.
stamp
][
account
[
"key"
]
]
.
get
(
cluster
[
"key"
])
is
None
:
self
.
cache
[
item
+
'-'
+
self
.
stamp
][
account
[
"key"
]]
.
update
({
cluster
[
"key"
]:
{
}
})
self
.
cache
[
item
+
'-'
+
self
.
stamp
][
account
[
"key"
]
][
cluster
[
"key"
]][
currency
]
=
cluster
[
"cost"
][
"value"
]
def
on_get
(
self
,
req
,
resp
,
entity
,
start
,
end
,
item
):
try
:
self
.
stamp
=
start
.
replace
(
'-'
,
''
)
+
end
.
replace
(
'-'
,
''
)
if
entity
==
"account"
or
entity
==
"user"
:
self
.
timestamp
=
int
(
datetime
.
timestamp
(
datetime
.
now
()))
if
not
hasattr
(
self
,
'cache'
):
self
.
cache
=
{}
if
self
.
cache
.
get
(
item
+
'-'
+
self
.
stamp
)
is
None
:
esdata
=
self
.
get_es_data
(
entity
,
start
,
end
,
item
)
else
:
lifetime
=
self
.
timestamp
-
\
self
.
cache
[
item
+
'-'
+
self
.
stamp
][
"timestamp"
]
if
lifetime
>
10
:
esdata
=
self
.
get_es_data
(
entity
,
start
,
end
,
item
)
response
=
self
.
cache
[
item
+
'-'
+
self
.
stamp
]
else
:
response
=
{}
except
BaseException
:
response
=
{}
resp
.
status
=
falcon
.
HTTP_200
resp
.
media
=
response
Event Timeline
Log In to Comment