From 943c060b60b7482f9a9112469a44bc6e8e76ed02 Mon Sep 17 00:00:00 2001 From: berhsi Date: Tue, 10 Sep 2019 09:47:53 +0200 Subject: [PATCH] statusd.py now works with json modul, fix bug in set_values() read and write the api file now uses the json modul. correct a bug in function set_values(). --- statusd.py | 51 +++++++++++++-------------------------------------- 1 file changed, 13 insertions(+), 38 deletions(-) diff --git a/statusd.py b/statusd.py index b44288d..f3060f4 100755 --- a/statusd.py +++ b/statusd.py @@ -11,6 +11,7 @@ import socket import ssl import os import logging +import json from time import time, ctime, sleep from sys import exit, byteorder @@ -101,25 +102,6 @@ def receive_buffer_is_valid(raw_data): return False -def replace_entry(line, new): - ''' - The function becomes two strings and replaces the second part of the - first string from ":" until end with the second string. Than appends a - "," and returns the result. - - !!! Todo: needs exception handling !!! - - param 1: string - param 2: string - return: string - ''' - array = line.split(':') - logging.debug('Replace {} with {}'.format(array[1], new)) - array[1] = ''.join((new, ',')) - line = ':'.join((array[0], array[1])) - return line - - def change_status(raw_data, api): ''' Becomes the received byte and the path to API file. Grabs the content of @@ -139,21 +121,13 @@ def change_status(raw_data, api): logging.debug('API file is writable') with open(api, 'w') as api_file: logging.debug('API file open successfull') - for line in data.splitlines(): - if line.strip().startswith('"state":'): - edit = True - elif edit == True and line.strip().startswith('"open":'): - line = replace_entry(line, status) - elif edit == True and line.strip().startswith('"lastchange":'): - line = replace_entry(line, timestamp) - edit = False - try: - api_file.write(line) - api_file.write('\n') - except Exception as e: - logging.error('Failed to write line to API file') - logging.error('Line: {}'.format(line)) - logging.error('{}'.format(e)) + data["state"]["open"] = status + data["state"]["lastchange"] = timestamp + try: + json.dump(data, api_file, indent=4) + except Exception as e: + logging.error('Failed to change API file') + logging.error('{}'.format(e)) logging.debug('API file changed') else: logging.error('API file is not writable. Wrong permissions?') @@ -176,12 +150,12 @@ def read_api(api): with open(api, 'r') as api_file: logging.debug('API opened successfull') try: - api_data = api_file.read() - logging.debug('API read successfull') + api_json_data = json.load(api_file) + logging.debug('API file read successfull') except Exception as e: logging.error('Failed to read API file(): {}'.format(e)) return False - return (api_data) + return (api_json_data) logging.error('Failed to read API file') return False @@ -194,10 +168,11 @@ def set_values(raw_data): return: tuple ''' timestamp = str(time()).split('.')[0] - if raw_data == 'b\x01': + if raw_data == b'\x01': status = "true" else: status = "false" + logging.debug('Set values for timestamp: {} and status: {}'.format(timestamp, status)) return (status, timestamp)