Compare commits
11 Commits
fd3478600f
...
6702211c05
Author | SHA1 | Date | |
---|---|---|---|
6702211c05 | |||
f97e682640 | |||
c1e3248cc8 | |||
0e67b777b5 | |||
0435c427b3 | |||
be2df6970a | |||
1f5e7856b1 | |||
793de1ec64 | |||
6844e771b5 | |||
1282b6b201 | |||
975de1a230 |
@ -4,9 +4,5 @@ Administration
|
||||
:maxdepth: 2
|
||||
:caption: Contents:
|
||||
|
||||
create_user.rst
|
||||
lending.rst
|
||||
returning.rst
|
||||
opening_hours.rst
|
||||
add_items.rst
|
||||
GDPR.rst
|
||||
monitoring.rst
|
||||
|
@ -1,7 +1,7 @@
|
||||
Monitoring
|
||||
==========
|
||||
|
||||
ILMO should, like every other software, be easy to monitor. Therefore a basic metrics are exposed to `https://notfellchen.org/metrics`.
|
||||
Notfellchen should, like every other software, be easy to monitor. Therefore a basic metrics are exposed to `https://notfellchen.org/metrics`.
|
||||
The data is encoded in JSON format and is therefore suitable to bea read by humans and it is easy to use it as data source for further processing.
|
||||
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
Opening hours
|
||||
=============
|
||||
|
||||
The opening hours can be changed by selecting the page :guilabel:`Opening hours` in the navigation menu.
|
||||
You can not change an entry, simply delete it and create a new one.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
It is advised to fill empty time cells with a "-".
|
@ -1,8 +0,0 @@
|
||||
Returning
|
||||
=========
|
||||
|
||||
To return an item either visit the page :guilabel:`All loans` and search
|
||||
for the loan there or you search for the item via :guilabel:`Search`.
|
||||
|
||||
If you found the loan, you can simply click on the button :guilabel:`Return` and
|
||||
you are finished.
|
@ -4,16 +4,16 @@
|
||||
Deployment
|
||||
**********
|
||||
|
||||
There are different ways to deploy ILMO. We support an ansible+docker based deployment and manual installation.
|
||||
There are different ways to deploy Notfellchen. We support an ansible+docker based deployment and manual installation.
|
||||
|
||||
Ansible deployment
|
||||
==================
|
||||
|
||||
ILMO can be deployed with the `ilmo-ansible-role <https://github.com/moan0s/ansible-role-ilmo>`_ that is based on the
|
||||
official ILMO docker image. This role will only install ilmo itself. If you want a complete setup that includes a
|
||||
Notfellchen can be deployed with the `notfellchen-ansible-role <https://github.com/moan0s/ansible-role-notfellchen>`_ that is based on the
|
||||
official Notfellchen docker image. This role will only install notfellchen itself. If you want a complete setup that includes a
|
||||
database and a webserver with minimal configuration you can use the
|
||||
`mash-playbook <https://github.com/mother-of-all-self-hosting/mash-playbook>`_ by following `it's documentation
|
||||
on ILMO <https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/ilmo.md>`_.
|
||||
on Notfellchen <https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/notfellchen.md>`_.
|
||||
|
||||
|
||||
|
||||
@ -21,10 +21,10 @@ Manual Deployment
|
||||
=================
|
||||
|
||||
|
||||
This guide describes the installation of a installation of ILMO from source. It is inspired by this great guide from
|
||||
This guide describes the installation of a installation of Notfellchen from source. It is inspired by this great guide from
|
||||
pretix_.
|
||||
|
||||
.. warning:: Even though this guide tries to make it as straightforward to run ILMO, it still requires some Linux experience to
|
||||
.. warning:: Even though this guide tries to make it as straightforward to run Notfellchen, it still requires some Linux experience to
|
||||
get it right. If you're not feeling comfortable managing a Linux server, check out a managed service_.
|
||||
|
||||
This guide is tested on **Ubuntu20.04** but it should work very similar on other modern systemd based distributions.
|
||||
@ -39,18 +39,18 @@ installation guides):
|
||||
* A HTTP reverse proxy, e.g. `nginx`_ or Traefik to allow HTTPS connections
|
||||
* A `PostgreSQL`_ database server
|
||||
|
||||
Also recommended is, that you use a firewall, although this is not a ILMO-specific recommendation. If you're new to
|
||||
Also recommended is, that you use a firewall, although this is not a Notfellchen-specific recommendation. If you're new to
|
||||
Linux and firewalls, it is recommended that you start with `ufw`_.
|
||||
|
||||
.. note:: Please, do not run ILMO without HTTPS encryption. You'll handle user data and thanks to `Let's Encrypt`_
|
||||
.. note:: Please, do not run Notfellchen without HTTPS encryption. You'll handle user data and thanks to `Let's Encrypt`_
|
||||
SSL certificates can be obtained for free these days.
|
||||
|
||||
Unix user
|
||||
---------
|
||||
|
||||
As we do not want to run ilmo as root, we first create a new unprivileged user::
|
||||
As we do not want to run notfellchen as root, we first create a new unprivileged user::
|
||||
|
||||
# adduser ilmo --disabled-password --home /var/ilmo
|
||||
# adduser notfellchen --disabled-password --home /var/notfellchen
|
||||
|
||||
In this guide, all code lines prepended with a ``#`` symbol are commands that you need to execute on your server as
|
||||
``root`` user (e.g. using ``sudo``); all lines prepended with a ``$`` symbol should be run by the unprivileged user.
|
||||
@ -66,16 +66,16 @@ best compatibility. You can check this with the following command::
|
||||
|
||||
For PostgreSQL database creation, we would do::
|
||||
|
||||
# sudo -u postgres createuser ilmo
|
||||
# sudo -u postgres createdb -O ilmo ilmo
|
||||
# su ilmo
|
||||
# sudo -u postgres createuser notfellchen
|
||||
# sudo -u postgres createdb -O notfellchen notfellchen
|
||||
# su notfellchen
|
||||
$ psql
|
||||
> ALTER USER ilmo PASSWORD 'strong_password';
|
||||
> ALTER USER notfellchen PASSWORD 'strong_password';
|
||||
|
||||
Package dependencies
|
||||
--------------------
|
||||
|
||||
To build and run ilmo, you will need the following debian packages::
|
||||
To build and run notfellchen, you will need the following debian packages::
|
||||
|
||||
# apt-get install git build-essential python-dev python3-venv python3 python3-pip \
|
||||
python3-dev
|
||||
@ -83,32 +83,32 @@ To build and run ilmo, you will need the following debian packages::
|
||||
Config file
|
||||
-----------
|
||||
|
||||
We now create a config directory and config file for ilmo::
|
||||
We now create a config directory and config file for notfellchen::
|
||||
|
||||
# mkdir /etc/ilmo
|
||||
# touch /etc/ilmo/ilmo.cfg
|
||||
# chown -R ilmo:ilmo /etc/ilmo/
|
||||
# chmod 0600 /etc/ilmo/ilmo.cfg
|
||||
# mkdir /etc/notfellchen
|
||||
# touch /etc/notfellchen/notfellchen.cfg
|
||||
# chown -R notfellchen:notfellchen /etc/notfellchen/
|
||||
# chmod 0600 /etc/notfellchen/notfellchen.cfg
|
||||
|
||||
Fill the configuration file ``/etc/ilmo/ilmo.cfg`` with the following content (adjusted to your environment)::
|
||||
Fill the configuration file ``/etc/notfellchen/notfellchen.cfg`` with the following content (adjusted to your environment)::
|
||||
|
||||
[ilmo]
|
||||
[notfellchen]
|
||||
instance_name=My library
|
||||
url=https://ilmo.example.com
|
||||
url=https://notfellchen.example.com
|
||||
|
||||
[database]
|
||||
backend=postgresql
|
||||
name=ilmo
|
||||
user=ilmo
|
||||
name=notfellchen
|
||||
user=notfellchen
|
||||
|
||||
[locations]
|
||||
static=/var/ilmo/static
|
||||
static=/var/notfellchen/static
|
||||
|
||||
[mail]
|
||||
; See config file documentation for more options
|
||||
; from=ilmo@example.com
|
||||
; from=notfellchen@example.com
|
||||
; host=127.0.0.1
|
||||
; user=ilmo
|
||||
; user=notfellchen
|
||||
; password=foobar
|
||||
; port=587
|
||||
|
||||
@ -121,21 +121,21 @@ Fill the configuration file ``/etc/ilmo/ilmo.cfg`` with the following content (a
|
||||
;Scope=
|
||||
;Policy=
|
||||
|
||||
Install ilmo as package
|
||||
Install notfellchen as package
|
||||
------------------------
|
||||
|
||||
Now we will install ilmo itself. The following steps are to be executed as the ``ilmo`` user. Before we
|
||||
actually install ilmo, we will create a virtual environment to isolate the python packages from your global
|
||||
Now we will install notfellchen itself. The following steps are to be executed as the ``notfellchen`` user. Before we
|
||||
actually install notfellchen, we will create a virtual environment to isolate the python packages from your global
|
||||
python installation::
|
||||
|
||||
$ python3 -m venv /var/ilmo/venv
|
||||
$ source /var/ilmo/venv/bin/activate
|
||||
$ python3 -m venv /var/notfellchen/venv
|
||||
$ source /var/notfellchen/venv/bin/activate
|
||||
(venv)$ pip3 install -U pip setuptools wheel
|
||||
|
||||
We now clone and install ilmo, its direct dependencies and gunicorn::
|
||||
We now clone and install notfellchen, its direct dependencies and gunicorn::
|
||||
|
||||
(venv)$ git clone https://github.com/moan0s/ILMO2
|
||||
(venv)$ cd ILMO2/src/
|
||||
(venv)$ git clone https://github.com/moan0s/Notfellchen2
|
||||
(venv)$ cd Notfellchen2/src/
|
||||
(venv)$ pip3 install -r requirements.txt
|
||||
(venv)$ pip3 install -e .
|
||||
|
||||
@ -148,26 +148,26 @@ Finally, we compile static files and create the database structure::
|
||||
(venv)$ django-admin compilemessages --ignore venv
|
||||
|
||||
|
||||
Start ilmo as a service
|
||||
Start notfellchen as a service
|
||||
-------------------------
|
||||
|
||||
You should start ilmo using systemd to automatically start it after a reboot. Create a file
|
||||
named ``/etc/systemd/system/ilmo-web.service`` with the following content::
|
||||
You should start notfellchen using systemd to automatically start it after a reboot. Create a file
|
||||
named ``/etc/systemd/system/notfellchen-web.service`` with the following content::
|
||||
|
||||
[Unit]
|
||||
Description=ilmo web service
|
||||
Description=notfellchen web service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=ilmo
|
||||
Group=ilmo
|
||||
Environment="VIRTUAL_ENV=/var/ilmo/venv"
|
||||
Environment="PATH=/var/ilmo/venv/bin:/usr/local/bin:/usr/bin:/bin"
|
||||
ExecStart=/var/ilmo/venv/bin/gunicorn ilmo.wsgi \
|
||||
--name ilmo --workers 5 \
|
||||
User=notfellchen
|
||||
Group=notfellchen
|
||||
Environment="VIRTUAL_ENV=/var/notfellchen/venv"
|
||||
Environment="PATH=/var/notfellchen/venv/bin:/usr/local/bin:/usr/bin:/bin"
|
||||
ExecStart=/var/notfellchen/venv/bin/gunicorn notfellchen.wsgi \
|
||||
--name notfellchen --workers 5 \
|
||||
--max-requests 1200 --max-requests-jitter 50 \
|
||||
--log-level=info --bind=127.0.0.1:8345
|
||||
WorkingDirectory=/var/ilmo
|
||||
WorkingDirectory=/var/notfellchen
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
@ -176,14 +176,14 @@ named ``/etc/systemd/system/ilmo-web.service`` with the following content::
|
||||
You can now run the following commands to enable and start the services::
|
||||
|
||||
# systemctl daemon-reload
|
||||
# systemctl enable ilmo-web
|
||||
# systemctl start ilmo-web
|
||||
# systemctl enable notfellchen-web
|
||||
# systemctl start notfellchen-web
|
||||
|
||||
|
||||
SSL
|
||||
---
|
||||
|
||||
The following snippet is an example on how to configure a nginx proxy for ilmo::
|
||||
The following snippet is an example on how to configure a nginx proxy for notfellchen::
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
@ -196,8 +196,8 @@ The following snippet is an example on how to configure a nginx proxy for ilmo::
|
||||
#
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
ssl_certificate /etc/letsencrypt/live/ilmo.example.com/cert.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/ilmo.example.com/privkey.pem;
|
||||
ssl_certificate /etc/letsencrypt/live/notfellchen.example.com/cert.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/notfellchen.example.com/privkey.pem;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
|
||||
@ -208,7 +208,7 @@ The following snippet is an example on how to configure a nginx proxy for ilmo::
|
||||
add_header Referrer-Policy same-origin;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
|
||||
server_name ilmo.example.com;
|
||||
server_name notfellchen.example.com;
|
||||
location / {
|
||||
proxy_pass http://localhost:8345;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
@ -217,7 +217,7 @@ The following snippet is an example on how to configure a nginx proxy for ilmo::
|
||||
}
|
||||
|
||||
location /static/ {
|
||||
alias /var/ilmo/static/;
|
||||
alias /var/notfellchen/static/;
|
||||
access_log off;
|
||||
expires 365d;
|
||||
add_header Cache-Control "public";
|
||||
@ -230,22 +230,22 @@ We recommend reading about setting `strong encryption settings`_ for your web se
|
||||
Next steps
|
||||
----------
|
||||
|
||||
Yay, you are done! You should now be able to reach ilmo at https://ilmo.example.com/
|
||||
Yay, you are done! You should now be able to reach notfellchen at https://notfellchen.example.com/
|
||||
|
||||
Updates
|
||||
-------
|
||||
|
||||
.. warning:: While we try hard not to break things, **please perform a backup before every upgrade**.
|
||||
|
||||
To upgrade to a new ilmo release, pull the latest code changes and run the following commands::
|
||||
To upgrade to a new notfellchen release, pull the latest code changes and run the following commands::
|
||||
|
||||
$ source /var/ilmo/venv/bin/activate
|
||||
$ source /var/notfellchen/venv/bin/activate
|
||||
(venv)$ git pull
|
||||
(venv)$ pg_dump ilmo > ilmo.psql
|
||||
(venv)$ pg_dump notfellchen > notfellchen.psql
|
||||
(venv)$ python manage.py migrate
|
||||
(venv)$ django-admin compilemessages --ignore venv
|
||||
|
||||
# systemctl restart ilmo-web
|
||||
# systemctl restart notfellchen-web
|
||||
|
||||
|
||||
.. _Postfix: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-16-04
|
||||
|
BIN
docs/user/abonnieren.png
Normal file
BIN
docs/user/abonnieren.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
@ -1,9 +1,18 @@
|
||||
Benachrichtigungen
|
||||
==================
|
||||
|
||||
Jede Vermittlung kann abonniert werden. Dafür klickst du auf die Glocke neben dem Titel der Vermittlung.
|
||||
|
||||
.. image:: abonnieren.png
|
||||
|
||||
Auf der Website
|
||||
+++++++++++++++
|
||||
|
||||
|
||||
|
||||
E-Mail
|
||||
++++++
|
||||
|
||||
Mit während deiner :doc:`registrierung` gibst du eine E-Mail Addresse an.
|
||||
Wir senden dir Benachrichtigungen an diese E-Mail. Du kannst das in deinen Profileinstellungen anpassen.
|
||||
|
||||
Benachrichtigungen senden wir per Mail - du kannst das jederzeit in den Einstellungen deaktivieren.
|
@ -7,5 +7,4 @@ Users guide
|
||||
|
||||
registrierung.rst
|
||||
benachrichtigungen.rst
|
||||
login.rst
|
||||
email.rst
|
||||
vermittlungen.rst
|
||||
|
@ -1,5 +1,10 @@
|
||||
Registration
|
||||
Registrierung
|
||||
================================
|
||||
|
||||
To register you have to visit the library. An librarian will then set up an account for you.
|
||||
You will need to provide an valid E-Mail Address and a password.
|
||||
Du kannst dich jederzeit selbst registrieren. Das geht unter https://notfellchen.org/accounts/register/
|
||||
|
||||
Ein Account ermöglicht es dir
|
||||
|
||||
* Kommentare zu hinterlassen
|
||||
* Vermittlungen hinzuzufügen
|
||||
* Vermittlungen zu abonnieren
|
@ -9,10 +9,9 @@ Nach 3 Wochen ohne Prüfung werden Anzeigen automatisch von der Seite entfernt u
|
||||
|
||||
Darüber hinaus werden einmal täglich die verlinkten Seiten automatisiert geprüft. Wenn eine Vermittlungs-Seite bei einem Tierheim oder einer Pflegestelle entfernt wurde, wird die Anzeige ebenfalls deaktiviert.
|
||||
|
||||
Vermittlungen können von allen Menschen, auch ohne Account gemeldet werden. Grund dafür kann sein, dass Informationen veraltet sind oder Verdacht von Tierwohlgefärdung. Gemeldete Vermittlungen werden vom Moderationsteam geprüft und ggf. entfernt.
|
||||
Vermittlungen können von allen Menschen, auch ohne Account gemeldet werden. Grund dafür kann sein, dass Informationen veraltet sind oder ein Verdacht von Tierwohlgefärdung. Gemeldete Vermittlungen werden vom Moderationsteam geprüft und ggf. entfernt.
|
||||
|
||||
Die Kommentarfunktion von Vermittlungen ermöglicht es angemeldeten Nutzer*innen zusätzliche Informationen hinzuzufügen oder Fragen zu stellen.
|
||||
Ersteller*innen von Vermittlungen werden über neue Kommentare per Mail benachrichtigt, ebenso alle die die Vermittlung abonniert haben.
|
||||
|
||||
Kommentare können, wie Vermittlungen, gemeldet werden.
|
||||
|
||||
|
21
src/fellchensammlung/migrations/0010_timestamp.py
Normal file
21
src/fellchensammlung/migrations/0010_timestamp.py
Normal file
@ -0,0 +1,21 @@
|
||||
# Generated by Django 5.1.1 on 2024-10-19 18:36
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fellchensammlung', '0009_log'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Timestamp',
|
||||
fields=[
|
||||
('key', models.CharField(max_length=255, primary_key=True, serialize=False, verbose_name='Schlüssel')),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='Zeitstempel')),
|
||||
('data', models.CharField(blank=True, max_length=2000, null=True)),
|
||||
],
|
||||
),
|
||||
]
|
@ -287,6 +287,12 @@ class AdoptionNotice(models.Model):
|
||||
return False
|
||||
return self.adoptionnoticestatus.is_active
|
||||
|
||||
@property
|
||||
def is_to_be_checked(self, include_active=False):
|
||||
if not hasattr(self, 'adoptionnoticestatus'):
|
||||
return False
|
||||
return self.adoptionnoticestatus.is_to_be_checked or (include_active and self.adoptionnoticestatus.is_active)
|
||||
|
||||
def set_checked(self):
|
||||
self.last_checked = datetime.now()
|
||||
self.save()
|
||||
@ -353,6 +359,10 @@ class AdoptionNoticeStatus(models.Model):
|
||||
def is_active(self):
|
||||
return self.major_status == self.ACTIVE
|
||||
|
||||
@property
|
||||
def is_to_be_checked(self):
|
||||
return self.major_status == self.DISABLED and self.minor_status == "unchecked"
|
||||
|
||||
@staticmethod
|
||||
def get_minor_choices(major_status):
|
||||
return AdoptionNoticeStatus.MINOR_STATUS_CHOICES[major_status]
|
||||
@ -655,4 +665,16 @@ class Log(models.Model):
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"[{self.action}] - {self.user} - {self.created_at.strftime('%H:%M:%S %d-%m-%Y ')}"
|
||||
return f"[{self.action}] - {self.user} - {self.created_at.strftime('%H:%M:%S %d-%m-%Y ')}"
|
||||
|
||||
|
||||
class Timestamp(models.Model):
|
||||
"""
|
||||
Class to store timestamps based on keys
|
||||
"""
|
||||
key = models.CharField(max_length=255, verbose_name=_("Schlüssel"), primary_key=True)
|
||||
timestamp = models.DateTimeField(auto_now_add=True, verbose_name=_("Zeitstempel"))
|
||||
data = models.CharField(max_length=2000, blank=True, null=True)
|
||||
|
||||
def ___str__(self):
|
||||
return f"[{self.key}] - {self.timestamp.strftime('%H:%M:%S %d-%m-%Y ')} - {self.data}"
|
||||
|
@ -1,24 +1,38 @@
|
||||
from datetime import datetime
|
||||
from notfellchen.celery import app as celery_app
|
||||
from .tools.admin import clean_locations, deactivate_unchecked_adoption_notices
|
||||
from .tools.misc import healthcheck_ok
|
||||
from .models import Location, AdoptionNotice
|
||||
from .models import Location, AdoptionNotice, Timestamp
|
||||
|
||||
|
||||
def set_timestamp(key: str):
|
||||
try:
|
||||
ts = Timestamp.objects.get(key=key)
|
||||
ts.timestamp = datetime.now()
|
||||
except Timestamp.DoesNotExist:
|
||||
Timestamp.objects.create(key=key, timestamp=datetime.now())
|
||||
|
||||
|
||||
@celery_app.task(name="admin.clean_locations")
|
||||
def task_clean_locations():
|
||||
clean_locations()
|
||||
set_timestamp("task_clean_locations")
|
||||
|
||||
|
||||
@celery_app.task(name="admin.deactivate_unchecked")
|
||||
def task_deactivate_unchecked():
|
||||
deactivate_unchecked_adoption_notices()
|
||||
set_timestamp("task_deactivate_unchecked")
|
||||
|
||||
|
||||
@celery_app.task(name="commit.add_location")
|
||||
def add_adoption_notice_location(pk):
|
||||
instance = AdoptionNotice.objects.get(pk=pk)
|
||||
Location.add_location_to_object(instance)
|
||||
set_timestamp("add_adoption_notice_location")
|
||||
|
||||
|
||||
@celery_app.task(name="tools.healthcheck")
|
||||
def task_healthcheck():
|
||||
healthcheck_ok()
|
||||
set_timestamp("task_healthcheck")
|
||||
|
@ -2,7 +2,7 @@
|
||||
{% load custom_tags %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}<title>{{ animal.name }}</title> %}
|
||||
{% block title %}<title>{{ animal.name }}</title>{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include "fellchensammlung/details/detail-animal-partial.html" %}
|
||||
|
@ -2,7 +2,7 @@
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
{% block title %}<title>{% translate "Vermittlung hinzufügen" %}</title> %}{% endblock %}
|
||||
{% block title %}<title>{% translate "Vermittlung hinzufügen" %}</title>{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{% translate "Vermitteln" %}</h1>
|
||||
|
@ -24,6 +24,28 @@
|
||||
<p>{% translate "Texte scheinen vollständig" %}</p>
|
||||
{% endif %}
|
||||
|
||||
<h2>{% trans "Zeitstempel" %}</h2>
|
||||
{% if timestamps|length > 0 %}
|
||||
<p>
|
||||
<table>
|
||||
<tr>
|
||||
<th>{% translate "Key" %}</th>
|
||||
<th>{% translate "Zeitstempel" %}</th>
|
||||
<th>{% translate "Daten" %}</th>
|
||||
</tr>
|
||||
{% for timestamp in timestamps %}
|
||||
<tr>
|
||||
<td>{{ timestamp.key }}</td>
|
||||
<td>{{ timestamp.timestamp }}</td>
|
||||
<td>{{ timestamp.data }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</p>
|
||||
{% else %}
|
||||
<p>{% translate "Keine Zeitstempel geloggt." %}</p>
|
||||
{% endif %}
|
||||
|
||||
<h2>{% translate "Nicht-lokalisierte Vermittlungen" %}</h2>
|
||||
{% if number_not_geocoded_adoption_notices > 0 %}
|
||||
<details>
|
||||
|
@ -1,7 +1,7 @@
|
||||
{% extends "fellchensammlung/base_generic.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}<title>{% translate "Suche" %}</title> %}
|
||||
{% block title %}<title>{% translate "Suche" %}</title>{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form class="form-search card" method="post">
|
||||
|
@ -31,6 +31,6 @@ def age_as_hr_string(age: datetime.timedelta) -> str:
|
||||
|
||||
def healthcheck_ok():
|
||||
try:
|
||||
requests.get(settings.HEALTHCHECK_URL, timeout=10)
|
||||
requests.get(settings.HEALTHCHECKS_URL, timeout=10)
|
||||
except requests.RequestException as e:
|
||||
logging.error("Ping to healthcheck-server failed: %s" % e)
|
||||
|
@ -14,7 +14,7 @@ from notfellchen import settings
|
||||
from fellchensammlung import logger
|
||||
from .models import AdoptionNotice, Text, Animal, Rule, Image, Report, ModerationAction, \
|
||||
User, Location, AdoptionNoticeStatus, Subscriptions, CommentNotification, BaseNotification, RescueOrganization, \
|
||||
Species, Log
|
||||
Species, Log, Timestamp
|
||||
from .forms import AdoptionNoticeForm, AdoptionNoticeFormWithDateWidget, ImageForm, ReportAdoptionNoticeForm, \
|
||||
CommentForm, ReportCommentForm, AnimalForm, \
|
||||
AdoptionNoticeSearchForm, AnimalFormWithDateWidget, AdoptionNoticeFormWithDateWidgetAutoAnimal
|
||||
@ -80,6 +80,8 @@ def adoption_notice_detail(request, adoption_notice_id):
|
||||
is_subscribed = True
|
||||
except Subscriptions.DoesNotExist:
|
||||
is_subscribed = False
|
||||
else:
|
||||
is_subscribed = False
|
||||
has_edit_permission = user_is_owner_or_trust_level(request.user, adoption_notice)
|
||||
if request.method == 'POST':
|
||||
action = request.POST.get("action")
|
||||
@ -468,7 +470,7 @@ def updatequeue(request):
|
||||
last_checked_adoption_list = AdoptionNotice.objects.order_by("last_checked")
|
||||
else:
|
||||
last_checked_adoption_list = AdoptionNotice.objects.filter(owner=request.user).order_by("last_checked")
|
||||
adoption_notices = [adoption for adoption in last_checked_adoption_list if adoption.is_active]
|
||||
adoption_notices = [adoption for adoption in last_checked_adoption_list if adoption.is_active or adoption.is_to_be_checked]
|
||||
|
||||
context = {"adoption_notices": adoption_notices}
|
||||
return render(request, 'fellchensammlung/updatequeue.html', context=context)
|
||||
@ -520,6 +522,9 @@ def instance_health_check(request):
|
||||
except Text.DoesNotExist:
|
||||
missing_texts.append((text_code, language))
|
||||
|
||||
# Timestamps
|
||||
timestamps = Timestamp.objects.all()
|
||||
|
||||
context = {
|
||||
"number_of_adoption_notices": number_of_adoption_notices,
|
||||
"number_not_geocoded_adoption_notices": number_not_geocoded_adoption_notices,
|
||||
@ -529,7 +534,8 @@ def instance_health_check(request):
|
||||
"none_geocoded_rescue_orgs": none_geocoded_rescue_orgs,
|
||||
"missing_texts": missing_texts,
|
||||
"number_unchecked_ans": number_unchecked_ans,
|
||||
"unchecked_ans": unchecked_ans
|
||||
"unchecked_ans": unchecked_ans,
|
||||
"timestamps": timestamps
|
||||
}
|
||||
|
||||
return render(request, 'fellchensammlung/instance-health-check.html', context=context)
|
||||
|
@ -25,5 +25,5 @@ app.conf.beat_schedule = {
|
||||
if settings.HEALTHCHECKS_URL is not None and settings.HEALTHCHECKS_URL != "":
|
||||
# If a healthcheck is configured, this will send an hourly ping to the healthchecks server
|
||||
app.conf.beat_schedule['hourly-healthcheck'] = {'task': 'tools.healthcheck',
|
||||
'schedule': crontab(minute=32),
|
||||
'schedule': crontab(minute=43),
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user