Created
December 18, 2019 13:20
-
-
Save cruor99/647027585cca06382a3fded1c2b0706c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#:import MDDropdownMenu kivymd.menu.MDDropdownMenu | |
<LogScreen>: | |
BoxLayout: | |
orientation: "vertical" | |
Toolbar: | |
id: toolbar | |
title: "Logs for {}".format(root.machine_name) | |
left_action_items: [["chevron-left", lambda x: app.root.onBackBtn(), False]] | |
md_bg_color: app.theme_cls.primary_color | |
background_color: app.theme_cls.primary_color | |
BoxLayout: | |
orientation: "vertical" | |
padding: dp(5) | |
BoxLayout: | |
size_hint_y: .1 | |
orientation: "horizontal" | |
MDTextField: | |
hint_text: "Søk i loggen" | |
on_text: root.update_query(self.text) | |
MDFlatButton: | |
text: "Filtre" | |
on_release: MDDropdownMenu(items=root.filter_items, width_mult=2).open(self) | |
RecycleView: | |
MDList: | |
spacing: dp(4) | |
height: self.minimum_height | |
id: logger_list | |
<LogCard>: | |
size_hint_y: None | |
height: log_text.texture_size[1] | |
BoxLayout: | |
spacing: dp(2) | |
MDLabel: | |
size_hint_x: .5 | |
id: log_text | |
text: root.log_message | |
padding: dp(2), dp(2) | |
MDLabel: | |
padding: dp(2), dp(2) | |
size_hint_x: .5 | |
halign: "right" | |
text: "{}".format(root.timestamp[:19]) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from kivy.uix.screenmanager import Screen | |
from kivy.app import App | |
from kivy.properties import StringProperty, ListProperty, ObjectProperty, NumericProperty | |
from kivy.network.urlrequest import UrlRequest | |
from kivy.lang import Builder | |
from kivy.clock import Clock | |
from kivy.logger import Logger | |
from kivymd.card import MDCard | |
from kivymd.list import ThreeLineListItem | |
from kivymd.snackbar import Snackbar | |
from elasticsearch import Elasticsearch | |
import pytz | |
import datetime | |
from dateutil import parser | |
from components.popups import LogAmountPopup | |
Builder.load_file("kv/screens/log_screen.kv") | |
class LogScreen(Screen): | |
machine_id = StringProperty("") | |
machine_name = StringProperty("") | |
search_scheduler = ObjectProperty() | |
log_results = ListProperty([]) | |
query = StringProperty("") | |
log_size = NumericProperty(100) | |
filter_items = ListProperty([]) | |
def open_log_size_dialog(self, *args): | |
Logger.info("Args from filter_items: {}".format(args)) | |
logsize_popup = LogAmountPopup() | |
logsize_popup.bind(on_dismiss=self.set_log_amount) | |
logsize_popup.open() | |
def set_log_amount(self, instance): | |
self.log_size = instance.log_size | |
Logger.info("New log size: {}".format(self.log_size)) | |
def on_enter(self): | |
self.query = "tags:"+'"{}"'.format(self.machine_id) | |
self.do_search() | |
self.search_scheduler = Clock.schedule_interval(self.do_search, 5) | |
Clock.schedule_once(self.setup_filter_items) | |
def setup_filter_items(self, *args): | |
self.filter_items = [ | |
{ | |
'viewclass': 'MDMenuItem', | |
'text': 'Logstørrelse', | |
"on_release": self.open_log_size_dialog | |
} | |
] | |
def on_leave(self): | |
self.ids.logger_list.clear_widgets() | |
self.search_scheduler.cancel() | |
def update_query(self, text): | |
if len(text) == 0: | |
self.query = 'tags:"{}"'.format(self.machine_id) | |
else: | |
self.query = 'tags:"{}" AND {}'.format(self.machine_id, text) | |
def do_search(self, *args): | |
es = Elasticsearch(["elasticsearchurlgoeshere"]) | |
try: | |
res = es.search(index="logstash-*", q=self.query, body={"sort":[ | |
{ | |
"@timestamp": { | |
"order": "desc" | |
} | |
} | |
], | |
"size": self.log_size, | |
}) | |
self.log_results = res["hits"]["hits"] | |
except Exception as e: | |
Logger.info(e) | |
Snackbar(text=str(e)).show() | |
def on_log_results(self, instance, value): | |
widget_list = [] | |
self.ids.logger_list.clear_widgets() | |
for hit in self.log_results: | |
data = hit["_source"] | |
timeobject = parser.parse(data["@timestamp"]) | |
corrected_time = timeobject + datetime.timedelta(hours=2) | |
item = LogCard() | |
item.log_message = data["message"] | |
item.logger_name = data["logger_name"] | |
item.timestamp = str(corrected_time) | |
widget_list.append(item) | |
self.ids.logger_list.add_widget(item) | |
class LogCard(MDCard): | |
log_message = StringProperty("") | |
timestamp = StringProperty("") | |
logger_name = StringProperty("") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment