13 Commits
v0.3 ... v0.4

Author SHA1 Message Date
Sven Holz
cb6b8e1aae add default values to env variables description 2022-06-20 17:50:43 +02:00
Sven Holz
1772f7d929 add default values to env variables description 2022-06-20 17:50:08 +02:00
Sven Holz
1850598038 add default values to env variables description 2022-06-20 17:46:30 +02:00
Sven Holz
c6e1cc3448 add default values to env variables description 2022-06-20 17:45:18 +02:00
Sven Holz
06cfd448da add default values to env variables description 2022-06-20 17:38:50 +02:00
Sven Holz
21e5627d58 ping timeout added 2022-06-20 17:06:18 +02:00
Sven Holz
7ed91947ab ping timeout added 2022-06-20 17:03:07 +02:00
Sven Holz
5c07ade336 ping timeout added 2022-06-20 15:24:17 +02:00
Sven Holz
6980539a02 ping timeout added 2022-06-20 15:21:48 +02:00
Sven Holz
99d934d041 config.ini to template 2022-06-17 00:46:26 +02:00
Sven Holz
4c5e9ceb90 fix 2022-06-17 00:46:06 +02:00
Sven Holz
5f5aea0332 renamed config.ini to config-template.ini 2022-06-17 00:36:33 +02:00
Sven Holz
b400e34c9a * v0.3
* setup-script fixed and backup added
  * fixed latency value problem (was sometimes string instead of float)
  * cleanup
2022-06-17 00:13:53 +02:00
7 changed files with 63 additions and 21 deletions

2
.gitignore vendored
View File

@@ -4,4 +4,4 @@
*.backup
grafana-datasource.yml
docker-compose.yml
config-template.ini
config.ini

View File

@@ -23,6 +23,11 @@
# host2 = 8.8.4.4
# host3 = 1.1.1.1
[hosts_timeout] # OPTIONAL; ping timeout in seconds (float); default is '1'
# host1 = 1
# host2 = 0.5
# host3 = 0.2
[hosts_timer] # OPTIONAL; ping interval in seconds; default is '5'
# host1 = 1
# host2 = 3

View File

@@ -29,7 +29,7 @@ class MyInfluxDB():
writes received data to Influxdb:
host: string which includes IP or FQDN
host_location: string which includes location of the host
ping_response: string which includes the ping reply in ms
ping_response: float which includes the ping reply in ms
"""
def __init__(self):
@@ -100,20 +100,23 @@ class ThreadPing(Thread):
----------
db: InfluxDB Object
host: string which includes IP or FQDN
host_timeout: float which defines how long we wait for a reply
host_timer: integer which defines how often pings are send in seconds (min. 1)
host_location: string which includes location of the host
"""
def __init__(self, db, host, host_timer, host_location):
def __init__(self, db, host, host_timeout, host_timer, host_location):
Thread.__init__(self)
self.MyDB = db
self.host = host
self.host_timeout = host_timeout
self.host_timer = host_timer
self.host_location = host_location
def run(self):
self.starttime = time()
while True:
self.ping_response_list = ping(self.host, count=1)
self.ping_response_list = ping(self.host, timeout=self.host_timeout, count=1)
self.ping_response = "{:.2f}".format(self.ping_response_list.rtt_avg_ms)
self.MyDB.write(self.host, self.host_location, self.ping_response)
sleep(self.host_timer - ((time() - self.starttime) % 1))
@@ -129,12 +132,14 @@ def main():
## IF ENVIRONMENT VARIABLES ARE PASSED IGNORE CONFIG FILE
if 'TARGET_HOST' in os.environ:
host = os.environ['TARGET_HOST']
host_timeout = float(os.getenv('TARGET_TIMEOUT', 1))
host_timer = int(os.getenv('TARGET_TIMER', 5))
host_location = os.getenv('TARGET_LOCATION', 'unknown')
# Create Thread
print("Creating thread for: %s, with interval: %s and location: %s" %(host, host_timer, host_location))
thread = ThreadPing(MyDB, host, host_timer, host_location)
print("Creating thread for: %s, with timeout: %s, with interval: %s and location: %s" % (
host, host_timeout, host_timer, host_location))
thread = ThreadPing(MyDB, host, host_timeout, host_timer, host_location)
my_threads.append(thread)
thread.start()
@@ -149,6 +154,9 @@ def main():
# Create thread for each configured host
for key, host in host_items:
# Check if hosts timeout is set otherwise use "1" (means 1 seconds)
host_timeout = float(config.get('hosts_timeout', key, fallback=1))
# Check if hosts timer is set otherwise use "5" (means 5 seconds)
host_timer = int(config.get('hosts_timer', key, fallback=5))
@@ -156,8 +164,8 @@ def main():
host_location = config.get('hosts_location', key, fallback="unknown")
# Create Thread
print("Creating thread for: %s, with interval: %s and location: %s" %(host, host_timer, host_location))
thread = ThreadPing(MyDB, host, host_timer, host_location)
print("Creating thread for: %s, with timeout: %s, with interval: %s and location: %s" % (host, host_timeout, host_timer, host_location))
thread = ThreadPing(MyDB, host, host_timeout, host_timer, host_location)
my_threads.append(thread)
thread.start()

View File

@@ -57,15 +57,16 @@ You can find everything under *./Docker_Build/* and in the python program itself
### ENV Variables
Name | Example | Usage | Option/Must
:------: | :-----: | :-----: | :-----:
INFLUX_URL | http://10.0.0.1:8086 | InfluxDB Host | must
INFLUX_TOKEN | eWOcp-MCv2Y3IJPlER7wc...ICKirhw0lwEczRNnrIoTqZAg== | InfluxDB API Token | must
INFLUX_BUCKET | latency | InfluxDB Bucket | must
INFLUX_ORG | MyOrg | InfluxDB Organization | must
TARGET_HOST | 8.8.8.8 | Monitored Host (IP/FQDN) | must
TARGET_TIMER | 3 | ping frequency in sec. | option
TARGET_LOCATION | Google | decript. location | option
Name | Example | Usage | Option/Must | Type | Default
:------: | :-----: | :-----: | :-----: | :-----: | :-----:
INFLUX_URL | http://10.0.0.1:8086 | InfluxDB Host | must | URL | ---
INFLUX_TOKEN | eWOcp-MCv2YPlER7wc...0zRNnrIoTqZAg== | InfluxDB API Token | must | String | ---
INFLUX_BUCKET | latency | InfluxDB Bucket | must | String | ---
INFLUX_ORG | MyOrg | InfluxDB Organization | must | String | ---
TARGET_HOST | 8.8.8.8 | Monitored Host (IP/FQDN) | must | FQDN or IP | ---
TARGET_TIMEOUT | 0.5 | ping timeout in sec. | optional | Float >0 | **1**
TARGET_TIMER | 3 | ping frequency in sec. | optional | Int >1 | **5**
TARGET_LOCATION | Google | decript. location | optional | String |**unknown**
-----
@@ -75,7 +76,9 @@ TARGET_LOCATION | Google | decript. location | option
**Keep in mind it´s a OR decision not a AND**
See [./latency-monitor/config.ini](./latency-monitor/config.ini)
See [./latency-monitor/config-template.ini](./latency-monitor/config-template.ini)
**ENV wins over file**
#### Docker-Compose Style
@@ -119,6 +122,7 @@ in the **.env** file *(env needs to be renamed to .env)* configure following var
- YOUR_BUCKET_NAME
- YOUR_ADMIN_TOKEN
- YOUR_MONITORED_TARGET
- YOUR_MONITORED_TARGET_TIMEOUT
- YOUR_MONITORED_TARGET_TIMER
- YOUR_MONITORED_TARGET_LOCATION
@@ -161,6 +165,14 @@ Just the certificates are missing look [here](#certificate)
Now run it and mybe pick a example dashboard for grafana from [here](#grafana-dashboard-examples)
#### BACKUPS FILES ???
The script will backup following files if found:
- *./docker-compose.yml*
- *./grafana/provisioning/datasources/grafana-datasource.yml*
-----
-----
@@ -181,7 +193,7 @@ You need to configure Variables in following files to make the compose work:
-----
- **docker-compose.yml** *(was docker-compose-full_stack.yml before)*
- **docker-compose.yml** *(generated from docker-compose-full_stack.yml)*
- PLACE_YOUR_FQDN_HERE (3 times)
-----
@@ -194,12 +206,13 @@ You need to configure Variables in following files to make the compose work:
- YOUR_BUCKET_NAME
- YOUR_ADMIN_TOKEN
- YOUR_MONITORED_TARGET
- YOUR_MONITORED_TARGET_TIMEOUT
- YOUR_MONITORED_TARGET_TIMER
- YOUR_MONITORED_TARGET_LOCATION
-----
- **grafana/provisioning/datasources/grafana-datasource.yml**
- **grafana/provisioning/datasources/grafana-datasource.yml** *(generated from grafana/grafana-datasource-template.yml)*
- YOUR_ADMIN_TOKEN
- YOUR_ORGANIZATION
- YOUR_BUCKET_NAME
@@ -232,7 +245,7 @@ Everything should be right in place now.
Just the certificates are missing look [here](#certificate)
Now run it and mybe pick a example dashboard for grafana from [here](#grafana-dashboard-examples)
Now just start over and maybe pick an example dashboard for grafana from [here](#grafana-dashboard-examples)
-----
-----
@@ -280,6 +293,15 @@ Contributors names and contact info
## Version History
- v0.3a
- ping timeout added
- cleanup
* v0.3
* setup-script fixed and backup added
* fixed latency value problem (was sometimes string instead of float)
* cleanup
* v0.2b
* cleanup

View File

@@ -134,6 +134,7 @@ services:
- INFLUX_BUCKET
- INFLUX_ORG
- TARGET_HOST
- TARGET_TIMEOUT
- TARGET_TIMER
- TARGET_LOCATION
networks:

1
env
View File

@@ -36,5 +36,6 @@ INFLUX_TOKEN=YOUR_ADMIN_TOKEN
INFLUX_BUCKET=YOUR_BUCKET_NAME
INFLUX_ORG=YOUR_ORGANIZATION
TARGET_HOST=YOUR_MONITORED_TARGET
TARGET_TIMEOUT=YOUR_MONITORED_TARGET_TIMEOUT
TARGET_TIMER=YOUR_MONITORED_TARGET_TIMER
TARGET_LOCATION=YOUR_MONITORED_TARGET_LOCATION

View File

@@ -23,6 +23,11 @@
# host2 = 8.8.4.4
# host3 = 1.1.1.1
[hosts_timeout] # OPTIONAL; ping timeout in seconds (float); default is '1'
# host1 = 1
# host2 = 0.5
# host3 = 0.2
[hosts_timer] # OPTIONAL; ping interval in seconds; default is '5'
# host1 = 1
# host2 = 3