utilize /etc/ directory

+ add config.py to read / touch create the etc config file

_read():
	tries to open the config files in read only mode to parse its contents.

_check():
	checks if the config file is present and then calls _read()
	if that is false it tries to touch create a new file.

	worst case scenario: file is present and holds content, the method assumes that the file isn't present. Therefore tries to touch-create a new file, if a file is against all odds present, only the mtime would be updated. Hence any file content would not be altered.

get():
	main method, calling _check()
	if a key is given return only the assigned value or None
	or return the whole dictionary
This commit is contained in:
nico 2020-02-03 20:49:52 +01:00
parent 0145458961
commit eaed97cf4f
Signed by: mightyBroccoli
GPG Key ID: EA7C31AAB1BDC1A2
3 changed files with 59 additions and 6 deletions

1
.gitignore vendored
View File

@ -110,6 +110,7 @@ dmypy.json
# Pycharm
.idea/
.venv/
venv
# config
config.json

56
config.py Normal file
View File

@ -0,0 +1,56 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import sys
from pathlib import Path
class Config:
def __init__(self):
# global config path
conf_path = '/etc/ejabberd-metrics.conf'
self.file = Path(conf_path)
self.content = None
def _read(self):
with open(self.file, 'r', encoding='utf-8') as f:
try:
self.content = json.load(f)
# catch json decoding errors
except json.JSONDecodeError as err:
print(err, file=sys.stderr)
exit(1)
def _check(self):
try:
# if file is present try to read it's contents
if self.file.exists():
self._read()
# if not create a blank file
else:
Path.touch(self.file)
# catch permission exceptions as this tries to write to /etc/
except PermissionError as err:
print(err, file=sys.stderr)
sys.exit(err.errno)
def get(self, key: str = None) -> (dict, None):
self._check()
# if a special key is request, return just that
if key is not None:
# safety measure
if key in self.content:
return self.content[key]
# if the key isn't part if self.content return None
else:
return None
# else return everything
return self.content

View File

@ -1,12 +1,10 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import os
import time
from influxdb import InfluxDBClient
from config import Config
from ejabberdrpc import EjabberdMetrics
@ -79,9 +77,7 @@ class Influx:
if __name__ == '__main__':
# load config
path = os.path.dirname(__file__)
with open('/'.join([path, 'config.json']), 'r', encoding='utf-8') as f:
config = json.load(f)
config = Config().get()
# creds and params
url = config['url'] if 'url' in config else 'http://localhost:5280/api'