Skip to content

Commit 11546a0

Browse files
committed
fix(controller): influxdb query error
1 parent e02b9c0 commit 11546a0

3 files changed

Lines changed: 64 additions & 57 deletions

File tree

rootfs/api/influxdb.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import threading
22
import logging
33
from typing import Iterator
4-
from contextlib import closing
54
from django.conf import settings
65
from influxdb_client import InfluxDBClient
76
from influxdb_client.client.flux_table import FluxRecord
@@ -22,24 +21,24 @@ def _get_influxdb_client() -> InfluxDBClient:
2221

2322

2423
def _query_stream(flux_script: str) -> Iterator[FluxRecord]:
25-
with closing(_get_influxdb_client()) as client:
26-
try:
27-
query_api = client.query_api()
28-
records = query_api.query_stream(flux_script)
29-
except ApiException as e:
30-
logger.exception(e)
31-
yield from []
32-
except Exception as e:
33-
logger.exception(e)
34-
yield from []
35-
else:
36-
yield from records
24+
client = _get_influxdb_client()
25+
try:
26+
query_api = client.query_api()
27+
records = query_api.query_stream(flux_script)
28+
except ApiException as e:
29+
logger.exception(e)
30+
yield from []
31+
except Exception as e:
32+
logger.exception(e)
33+
yield from []
34+
else:
35+
yield from records
3736

3837

3938
def query_container_count(
4039
namespaces: Iterator[str], start: int, stop: int) -> Iterator[FluxRecord]:
4140
namespace_range = ' or '.join(
42-
['r["namespace"] == \"{namespace}\"' for namespace in namespaces])
41+
[f'r["namespace"] == \"{namespace}\"' for namespace in namespaces])
4342
flux_script = f'''
4443
from(bucket: "kubernetes")
4544
|> range(start: {start}, stop: {stop})
@@ -58,7 +57,7 @@ def query_container_count(
5857
def query_network_flow(
5958
namespaces: Iterator[str], start: int, stop: int) -> Iterator[FluxRecord]:
6059
namespace_range = ' or '.join(
61-
['r["namespace"] == \"{namespace}\"' for namespace in namespaces])
60+
[f'r["namespace"] == \"{namespace}\"' for namespace in namespaces])
6261
flux_script = f'''
6362
from(bucket: "kubernetes")
6463
|> range(start: {start}, stop: {stop})

rootfs/api/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@
144144
views.UserView.as_view({'patch': 'enable'})),
145145
url(r'^users/(?P<username>[\w.@+-]+)/disable/?$',
146146
views.UserView.as_view({'patch': 'disable'})),
147-
url(r'^apps/(?P<id>{})/metrics/(?P<container_type>[a-z0-9]+(\-[a-z0-9]+)*)/?$'.format(
147+
url(r'^apps/(?P<id>{})/metrics/(?P<type>[a-z0-9]+(\-[a-z0-9]+)*)/status/?$'.format(
148148
settings.APP_URL_REGEX),
149149
views.MetricView.as_view({'get': 'status'})),
150150
url(r'^manager/(?P<type>[\w.@+-]+)s/(?P<id>{})/block/?$'.format(settings.APP_URL_REGEX),

rootfs/api/views.py

Lines changed: 49 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import uuid
55
import logging
66
import json
7+
import time
78
from copy import deepcopy
89
from django.core.cache import cache
910
from django.http import Http404, HttpResponse
@@ -892,34 +893,41 @@ def _get_app(self):
892893
self.check_object_permissions(self.request, app)
893894
return app
894895

896+
def _to_timestamp(t):
897+
return int(time.mktime(t.timetuple()))
898+
895899
def _get_cpus(self, app_id, container_type, start, stop, every):
896-
avg_total, max_total = [], []
897-
for record in influxdb.query_memory_usage(app_id, container_type, start, stop, every):
900+
avg_list, max_list = [], []
901+
for record in influxdb.query_cpu_usage(app_id, container_type, start, stop, every):
898902
if record["result"] == "mean":
899-
avg_total.append((record["_value"], record["timestamp"]))
903+
avg_list.append((int(time.mktime(record["_time"].timetuple())), record["_value"]))
900904
else:
901-
max_total.append((record["_value"], record["timestamp"]))
905+
max_list.append((int(time.mktime(record["_time"].timetuple())), record["_value"]))
902906
return {
903-
"max_total": max_total,
904-
"avg_total": avg_total
907+
"max": max_list,
908+
"avg": avg_list,
905909
}
906910

907911
def _get_memory(self, app_id, container_type, start, stop, every):
908-
max_total, avg_total = [], []
912+
max_list, avg_list = [], []
909913
for record in influxdb.query_memory_usage(app_id, container_type, start, stop, every):
910914
if record["result"] == "mean":
911-
avg_total.append((record["_value"], record["timestamp"]))
915+
avg_list.append((int(time.mktime(record["_time"].timetuple())), record["_value"]))
912916
else:
913-
max_total.append((record["_value"], record["timestamp"]))
917+
max_list.append((int(time.mktime(record["_time"].timetuple())), record["_value"]))
914918
return {
915-
"max_total": max_total,
916-
"avg_total": avg_total
919+
"max": max_list,
920+
"avg": avg_list,
917921
}
918922

919923
def _get_networks(self, app_id, container_type, start, stop, every):
920924
networks = []
921925
for record in influxdb.query_network_usage(app_id, container_type, start, stop, every):
922-
networks.append((record["rx_bytes"], record["tx_bytes"], record["timestamp"]))
926+
networks.append((
927+
int(time.mktime(record["_time"].timetuple())),
928+
record["rx_bytes"],
929+
record["tx_bytes"]
930+
))
923931
return networks
924932

925933
def _get_container_count(self, app_id, container_type, start, stop):
@@ -931,41 +939,41 @@ def _get_container_count(self, app_id, container_type, start, stop):
931939
def status(self, request, **kwargs):
932940
"""
933941
{
934-
935-
app_id: "django_t1",
936-
container_type: "web",
937-
container_count: 1
938-
cpus: {
939-
max_total: [(50000, 1611023853)],
940-
avg_total: [(50000, 1611023853)],
941-
timestamp: 1611023853
942-
},
943-
memory: {
944-
max_total: [(50000, 1611023853)],
945-
avg_total: [(50000, 1611023853)],
946-
timestamp: 1611023853
947-
},
948-
networks: [
949-
(10000, 50000, 1611023853)
950-
],
942+
"id": "django_t1",
943+
"type": "web",
944+
"count": 1,
945+
"status": {
946+
"cpus": {
947+
"max": [(1611023853, 50000)],
948+
"avg": [(1611023853, 50000)]
949+
},
950+
"memory": {
951+
"max": [(1611023853, 50000)],
952+
"avg": [(1611023853, 50000)],
953+
},
954+
"networks": [
955+
(1611023853, 10000, 50000)
956+
]
957+
}
951958
}
952959
"""
953-
app_id, container_type = self._get_app().id, kwargs['container_type']
954-
960+
app_id = self._get_app().id
955961
data = serializers.MetricSerializer(data=self.request.query_params)
956962
if not data.is_valid():
957963
return Response(data.errors, status=422)
958964
start, stop, every = data.validated_data['start'], data.validated_data[
959965
'stop'], data.validated_data["every"]
960966
return Response({
961-
"app_id": app_id,
962-
"container_type": container_type,
963-
"container_count": self._get_container_count(
964-
app_id, container_type, start, stop),
965-
"cpu_usage_list": self._get_cpus(
966-
app_id, container_type, start, stop, every),
967-
"memory": self._get_memory(
968-
app_id, container_type, start, stop, every),
969-
"networks": self._get_networks(
970-
app_id, container_type, start, stop, every)
967+
"id": app_id,
968+
"type": kwargs['type'],
969+
"count": self._get_container_count(
970+
app_id, kwargs['type'], start, stop),
971+
"status": {
972+
"cpus": self._get_cpus(
973+
app_id, kwargs['type'], start, stop, every),
974+
"memory": self._get_memory(
975+
app_id, kwargs['type'], start, stop, every),
976+
"networks": self._get_networks(
977+
app_id, kwargs['type'], start, stop, every),
978+
}
971979
})

0 commit comments

Comments
 (0)