Page MenuHomec4science

queryrange.py
No OneTemporary

File Metadata

Created
Tue, May 14, 01:27

queryrange.py

# © 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