Add basic settings page (so far just recheck time in minutes)

pull/1/head
Leigh Morresi 4 years ago
parent 5b8252c171
commit d0ee49e465

@ -121,6 +121,30 @@ def edit_page():
output = render_template("edit.html", uuid=uuid, watch=datastore.data['watching'][uuid], messages=messages) output = render_template("edit.html", uuid=uuid, watch=datastore.data['watching'][uuid], messages=messages)
return output return output
@app.route("/settings", methods=['GET', "POST"])
def settings_page():
global messages
if request.method == 'POST':
try:
minutes = int(request.values.get('minutes').strip())
except ValueError:
messages.append({'class': 'error', 'message': "Invalid value given, use an integer."})
else:
if minutes >= 5 and minutes <= 600:
datastore.data['settings']['requests']['minutes_between_check'] = minutes
datastore.needs_write = True
messages.append({'class': 'ok', 'message': "Updated"})
else:
messages.append({'class': 'error', 'message': "Must be equal to or greater than 5 and less than 600 minutes"})
output = render_template("settings.html", messages=messages, minutes=datastore.data['settings']['requests']['minutes_between_check'])
messages =[]
return output
@app.route("/import", methods=['GET', "POST"]) @app.route("/import", methods=['GET', "POST"])
def import_page(): def import_page():
import validators import validators
@ -275,8 +299,12 @@ def launch_checks():
import fetch_site_status import fetch_site_status
global running_update_threads global running_update_threads
for uuid,watch in datastore.data['watching'].items():
if watch['last_checked'] <= time.time() - 3 * 60 * 60: minutes = datastore.data['settings']['requests']['minutes_between_check']
for uuid, watch in datastore.data['watching'].items():
if watch['last_checked'] <= time.time() - (minutes * 60):
running_update_threads[watch['uuid']] = fetch_site_status.perform_site_check(uuid=uuid, running_update_threads[watch['uuid']] = fetch_site_status.perform_site_check(uuid=uuid,
datastore=datastore) datastore=datastore)
running_update_threads[watch['uuid']].start() running_update_threads[watch['uuid']].start()

@ -23,7 +23,7 @@ class ChangeDetectionStore:
}, },
'requests': { 'requests': {
'timeout': 15, # Default 15 seconds 'timeout': 15, # Default 15 seconds
'max_seconds_from_last_check': 3 * 60 * 60 # Default 3 hours 'minutes_between_check': 3 * 60 # Default 3 hours
} }
} }
} }
@ -47,7 +47,18 @@ class ChangeDetectionStore:
with open('/datastore/url-watches.json') as json_file: with open('/datastore/url-watches.json') as json_file:
from_disk = json.load(json_file) from_disk = json.load(json_file)
self.__data.update(from_disk) # @todo isnt there a way todo this dict.update recursively?
# Problem here is if the one on the disk is missing a sub-struct, it wont be present anymore.
if 'watching' in from_disk:
self.__data['watching'].update(from_disk['watching'])
if 'settings' in from_disk:
if 'headers' in from_disk['settings']:
self.__data['settings']['headers'].update(from_disk['settings']['headers'])
if 'requests' in from_disk['settings']:
self.__data['settings']['requests'].update(from_disk['settings']['requests'])
# Reinitialise each `watching` with our generic_definition in the case that we add a new var in the future. # Reinitialise each `watching` with our generic_definition in the case that we add a new var in the future.
# @todo pretty sure theres a python we todo this with an abstracted(?) object! # @todo pretty sure theres a python we todo this with an abstracted(?) object!

@ -4,34 +4,16 @@
<div class="edit-form"> <div class="edit-form">
<form class="pure-form pure-form-stacked" action="/api/update?uuid={{uuid}}" method="POST"> <form class="pure-form pure-form-stacked" action="/settings" method="POST">
<fieldset> <fieldset>
<div class="pure-control-group"> <div class="pure-control-group">
<label for="url">URL</label> <label for="minutes">Minutes between recheck</label>
<input type="url" id="url" required="" placeholder="https://..." name="url" value="{{ watch.url}}" <input type="text" id="minutes" required="" name="minutes" value="{{minutes}}"
size="50"/> size="5"/>
<span class="pure-form-message-inline">This is a required field.</span> <span class="pure-form-message-inline">This is a required field.</span>
</div> </div>
<div class="pure-control-group">
<label for="tag">Tag</label>
<input type="text" placeholder="tag" size="10" id="tag" name="tag" value="{{ watch.tag}}"/>
</div>
<fieldset class="pure-group">
<label for="headers">Extra request headers</label>
<textarea id=headers name="headers" class="pure-input-1-2" placeholder="Example
Cookie: foobar
User-Agent: wonderbra 1.0"
style="width: 100%;
font-family:monospace;
white-space: pre;
overflow-wrap: normal;
overflow-x: scroll;" rows="5">{% for key, value in watch.headers.items() %}{{ key }}: {{ value }}
{% endfor %}</textarea>
<br/>
</fieldset>
<div class="pure-control-group"> <div class="pure-control-group">
<button type="submit" class="pure-button pure-button-primary">Save</button> <button type="submit" class="pure-button pure-button-primary">Save</button>
</div> </div>
@ -39,9 +21,6 @@ User-Agent: wonderbra 1.0"
<div class="pure-control-group"> <div class="pure-control-group">
<a href="/" class="pure-button button-small button-cancel">Cancel</a> <a href="/" class="pure-button button-small button-cancel">Cancel</a>
<a href="/api/delete?uuid={{uuid}}"
class="pure-button button-small button-error ">Delete</a>
</div> </div>

Loading…
Cancel
Save