-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
95 lines (73 loc) · 2.61 KB
/
app.py
File metadata and controls
95 lines (73 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"""
@license
Copyright 2024 Cisco Systems, Inc. or its affiliates
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
"""
@author Nick Ciesinski (nciesins@cisco.com)
"""
import yaml
import redis
import requests
import urllib3
import hashlib
import io
from flask import Flask,Response
from apscheduler.schedulers.background import BackgroundScheduler
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
if not config['ssl']['verify']:
# Disable warning about SSL verify being disabled
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
schedulerInterval = 60
app = Flask(__name__)
def debug(message):
if config['debug']['enabled']:
print('DEBUG:',message)
def initRedis():
redisConnection = redis.Redis(host='localhost', port=6379, db=0)
return redisConnection
def setRedisKeypair(redisConnection,key,value):
redisConnection.set(key,value)
def getRedisKeypair(redisConnection,key):
return redisConnection.get(key)
def getMD5(url,name):
try:
response = requests.get(url,verify=config['ssl']['verify'],timeout=10)
except requests.exceptions.Timeout:
debug(f'{name} Connection Timeout')
return None
except requests.exceptions.ConnectionError:
debug(f'{name} Connection Error')
return None
if response.status_code == 200:
debug(f'{response.content} Connection Error')
return hashlib.md5(response.content).hexdigest()
def updateHashes(redisConnection):
for feed in config['feeds']:
md5Value = getMD5(feed['url'],feed['name'])
if md5Value:
debug(f'{feed["name"]} md5: {md5Value}')
setRedisKeypair(redisConnection,feed['name'],md5Value)
redisConnection = initRedis()
updateHashes(redisConnection)
scheduler = BackgroundScheduler()
scheduler.add_job(updateHashes, 'interval', seconds=schedulerInterval, args=[redisConnection,])
scheduler.start()
@app.route('/feed/<string:name>')
def feed(name):
md5Value = getRedisKeypair(redisConnection,name)
if md5Value:
return md5Value
else:
return "Invalid Feed Name"
if __name__ == '__main__':
app.run(debug=True,use_reloader=False)