mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-24 02:39:20 -05:00
286 lines
11 KiB
HTML
286 lines
11 KiB
HTML
{% load static %}
|
|
{% load i18n %}
|
|
<!DOCTYPE html>
|
|
<html lang="{{ LANGUAGE_CODE }}">
|
|
<head>
|
|
<title>Tandoor</title>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, minimal-ui, shrink-to-fit=no">
|
|
<meta name="robots" content="noindex,nofollow"/>
|
|
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
|
|
|
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
|
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet"
|
|
integrity="sha384-LN+7fdVzj6u52u30Kp6M/trliBMCMKTyK833zpbD+pXdCLuTusPj697FH4R/5mcr" crossorigin="anonymous">
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js" integrity="sha384-ndDqU0Gzau9qJ1lfW4pNLlhNTkCfHzAVBReH9diLvGRem5+R9g2FzA8ZGN954O5Q"
|
|
crossorigin="anonymous"></script>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
|
|
|
|
<h1>{% trans 'System' %}</h1>
|
|
{% blocktrans %}
|
|
Tandoor Recipes is an open source free software application. It can be found on
|
|
<a href="https://github.com/TandoorRecipes/recipes">GitHub</a>.
|
|
Changelogs can be found <a href="https://github.com/TandoorRecipes/recipes/releases">here</a>.
|
|
{% endblocktrans %}
|
|
|
|
<h3 class="mt-5">{% trans 'System Information' %}</h3>
|
|
{% if version_info %}
|
|
<div class="row">
|
|
<div class="col">
|
|
<div class="list-group">
|
|
{% for v in version_info %}
|
|
<div class="list-group-item list-group-item-action">
|
|
<div class="d-flex w-100 justify-content-between">
|
|
<h5 class="mb-1">{{ v.name }} ({{ v.branch }}) {% if v.tag %}- {{ v.tag }}{% endif %}</h5>
|
|
</div>
|
|
<pre class="card-text p-2" style="border: 1px solid lightgrey; border-radius: 5px" target="_blank">{{ v.version }}</pre>
|
|
<a href="{{ v.website }}">Website</a>
|
|
{% if v.commit_link %}
|
|
- <a href="{{ v.commit_link }}" target="_blank">Commit</a>
|
|
{% endif %}
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% else %}
|
|
{% blocktrans %}
|
|
You need to execute <code>version.py</code> in your update script to generate version information (done automatically in docker).
|
|
{% endblocktrans %}
|
|
{% endif %}
|
|
|
|
<h3 class="mt-5">{% trans 'Plugins' %}</h3>
|
|
Clone the plugin using git into the <code>recipe/plugin/</code> folder (Docker mount <code>/opt/recipe/recipes/plugins</code> to the host system and clone into it).
|
|
<table class="table table-bordered">
|
|
{% for p in plugins %}
|
|
<tr>
|
|
<td><a href="{{ p.github }}">{{ p.name }}</a> <br/>{{ p.base_path }}</td>
|
|
<td><a href="{% url 'view_plugin_update' %}?module={{ p.module }}" class="btn btn-primary">Git Pull</a></td>
|
|
</tr>
|
|
{% endfor %}
|
|
</table>
|
|
|
|
<h4 class="mt-3">{% trans 'Media Serving' %} <span class="badge text-bg-{% if gunicorn_media %}danger{% else %}success{% endif %}">{% if gunicorn_media %}
|
|
{% trans 'Warning' %}{% else %}{% trans 'Ok' %}{% endif %}</span></h4>
|
|
{% if gunicorn_media %}
|
|
{% blocktrans %}Serving media files directly using gunicorn/python is <b>not recommend</b>!
|
|
Please follow the steps described
|
|
<a href="https://github.com/vabene1111/recipes/releases/tag/0.8.1">here</a> to update
|
|
your installation.
|
|
{% endblocktrans %}
|
|
{% else %}
|
|
{% trans 'Everything is fine!' %}
|
|
{% endif %}
|
|
|
|
|
|
<h4 class="mt-3">{% trans 'Secret Key' %} <span
|
|
class="badge text-bg-{% if secret_key %}danger{% else %}success{% endif %}">{% if secret_key %}
|
|
{% trans 'Warning' %}{% else %}{% trans 'Ok' %}{% endif %}</span></h4>
|
|
{% if secret_key %}
|
|
{% blocktrans %}
|
|
You do not have a <code>SECRET_KEY</code> configured in your <code>.env</code> file. Django defaulted to the
|
|
standard key
|
|
provided with the installation which is publicly know and insecure! Please set
|
|
<code>SECRET_KEY</code> int the <code>.env</code> configuration file.
|
|
{% endblocktrans %}
|
|
{% else %}
|
|
{% trans 'Everything is fine!' %}
|
|
{% endif %}
|
|
|
|
<h4 class="mt-3">{% trans 'Debug Mode' %} <span
|
|
class="badge text-bg-{% if debug %}danger{% else %}success{% endif %}">{% if debug %}
|
|
{% trans 'Warning' %}{% else %}{% trans 'Ok' %}{% endif %}</span></h4>
|
|
{% if debug %}
|
|
{% blocktrans %}
|
|
This application is still running in debug mode. This is most likely not needed. Turn of debug mode by
|
|
setting
|
|
<code>DEBUG=0</code> int the <code>.env</code> configuration file.
|
|
{% endblocktrans %}
|
|
{% else %}
|
|
{% trans 'Everything is fine!' %}
|
|
{% endif %}
|
|
|
|
<h4 class="mt-3">{% trans 'Allowed Hosts' %} <span
|
|
class="badge text-bg-{% if '*' in allowed_hosts %}warning{% else %}success{% endif %}">{% if '*' in allowed_hosts %}
|
|
{% trans 'Warning' %}{% else %}{% trans 'Ok' %}{% endif %}</span></h4>
|
|
{% if debug %}
|
|
{% blocktrans %}
|
|
Your allowed hosts are configured to allow every host. This might be ok in some setups but should be avoided. Please see the docs about this.
|
|
{% endblocktrans %}
|
|
{% else %}
|
|
{% trans 'Everything is fine!' %}
|
|
{% endif %}
|
|
|
|
<h4 class="mt-3">{% trans 'Database' %}
|
|
<span class="badge text-bg-{{ postgres_status }}">
|
|
{% if postgres_status == 'warning' %}
|
|
{% trans 'Info' %}
|
|
{% elif postgres_status == 'danger' %}
|
|
{% trans 'Warning' %}
|
|
{% else %}
|
|
{% trans 'Ok' %}
|
|
{% endif %}
|
|
</span>
|
|
</h4>
|
|
{{ postgres_message }}
|
|
|
|
<h4 class="mt-3">{% trans 'Migrations' %}
|
|
<span
|
|
class="badge text-bg-{% if missing_migration %}danger{% else %}success{% endif %}">{% if missing_migration %}
|
|
{% trans 'Warning' %}{% else %}{% trans 'Ok' %}{% endif %}</span></h4>
|
|
|
|
<p>
|
|
{% blocktrans %}
|
|
Migrations should never fail!
|
|
Failed migrations will likely cause major parts of the app to not function correctly.
|
|
If a migration fails make sure you are on the latest version and if so please post the migration log and the overview below in a GitHub issue.
|
|
{% endblocktrans %}
|
|
</p>
|
|
|
|
<table class="table mt-3">
|
|
<thead>
|
|
<tr>
|
|
<th>App</th>
|
|
<th class="text-right">{% trans 'Migrations' %}</th>
|
|
</tr>
|
|
</thead>
|
|
{% for key,value in migration_info.items %}
|
|
<tr>
|
|
|
|
<td>{{ value.app }}</td>
|
|
<td class="text-right">
|
|
<span class="badge text-bg-{% if value.unapplied_migrations|length > 0 %}danger{% else %}success{% endif %}">
|
|
{{ value.applied_migrations|length }} / {{ value.total }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
{% for u in value.unapplied_migrations %}
|
|
<tr>
|
|
<td>
|
|
{{ u }}
|
|
</td>
|
|
<td></td>
|
|
</tr>
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
</table>
|
|
|
|
|
|
{# <h4 class="mt-3">#}
|
|
{# {% trans 'Orphaned Files' %}#}
|
|
{##}
|
|
{# <span class="badge text-bg-{% if orphans|length == 0 %}success{% elif orphans|length <= 25 %}warning{% else %}danger{% endif %}">#}
|
|
{# {% if orphans|length == 0 %}{% trans 'Success' %}#}
|
|
{# {% elif orphans|length <= 25 %}{% trans 'Warning' %}#}
|
|
{# {% else %}{% trans 'Danger' %}#}
|
|
{# {% endif %}#}
|
|
{# </span>#}
|
|
{# </h4>#}
|
|
|
|
{# {% if orphans|length == 0 %}#}
|
|
{# {% trans 'Everything is fine!' %}#}
|
|
{# {% else %}#}
|
|
{# {% blocktrans with orphan_count=orphans|length %}#}
|
|
{# There are currently {{ orphan_count }} orphaned files.#}
|
|
{# {% endblocktrans %}#}
|
|
{# <br>#}
|
|
{# <button id="toggle-button" class="btn btn-info btn-sm" onclick="toggleOrphans()">{% trans 'Show' %}</button>#}
|
|
{# <button class="btn btn-info btn-sm" onclick="deleteOrphans()">{% trans 'Delete' %}</button>#}
|
|
{# {% endif %}#}
|
|
{# <textarea id="orphans-list" style="display:none;" class="form-control" rows="20">#}
|
|
{#{% for orphan in orphans %}{{ orphan }}#}
|
|
{#{% endfor %}#}
|
|
{# </textarea>#}
|
|
{% if api_space_stats %}
|
|
<h4 class="mt-3">API Stats</h4>
|
|
<h6>Space Stats</h6>
|
|
<table class="table table-bordered table-striped">
|
|
{% for r in api_space_stats %}
|
|
<tr>
|
|
{% for c in r %}
|
|
<td>
|
|
{{ c }}
|
|
</td>
|
|
{% endfor %}
|
|
</tr>
|
|
{% endfor %}
|
|
</table>
|
|
|
|
<h6>Endpoint Stats</h6>
|
|
<table class="table table-bordered table-striped">
|
|
{% for r in api_stats %}
|
|
<tr>
|
|
{% for c in r %}
|
|
<td>
|
|
{{ c }}
|
|
</td>
|
|
{% endfor %}
|
|
</tr>
|
|
{% endfor %}
|
|
</table>
|
|
{% endif %}
|
|
<h4 class="mt-3">Cache Test</h4>
|
|
On first load this should be None, on second load it should be the time of the first load. Expiration is set to 10 seconds after that it should be None again. <br/>
|
|
{% if cache_response %}
|
|
|
|
<span class="badge text-bg-success">Cache entry from {{ cache_response|date:" d m Y H:i:s" }}</span>
|
|
{% else %}
|
|
<span class="badge text-bg-info">No cache entry before load</span>
|
|
{% endif %}
|
|
<h4 class="mt-3">Debug</h4>
|
|
<textarea class="form-control" rows="20">
|
|
Gunicorn Media: {{ gunicorn_media }}
|
|
Sqlite: {% if postgres %} {% trans 'False' %} {% else %} {% trans 'True' %} {% endif %}
|
|
{% if postgres %}PostgreSQL: {{ postgres_version }} {% endif %}
|
|
Debug: {{ debug }}
|
|
|
|
{% for key,value in request.META.items %}{% if key in 'SERVER_PORT,REMOTE_HOST,REMOTE_ADDR,SERVER_PROTOCOL' %}{{ key }}:{{ value }}
|
|
{% endif %}{% endfor %}
|
|
{% for key,value in request.META.items %}{% if 'HTTP_' in key %}{{ key }}:{{ value }}
|
|
{% endif %}{% endfor %}
|
|
{% for key,value in request.META.items %}{% if 'wsgi.' in key %}{{ key }}:{{ value }}
|
|
{% endif %}{% endfor %}
|
|
</textarea>
|
|
<br/>
|
|
<br/>
|
|
<form method="POST" id="delete-form">
|
|
{% csrf_token %}
|
|
<input type="hidden" name="delete_orphans" value="false">
|
|
</form>
|
|
|
|
</div>
|
|
|
|
|
|
<script type="application/javascript">
|
|
|
|
|
|
function toggleOrphans() {
|
|
var orphansList = document.getElementById('orphans-list');
|
|
var button = document.getElementById('toggle-button');
|
|
|
|
if (orphansList.style.display === 'none') {
|
|
orphansList.style.display = 'block';
|
|
button.innerText = "{% trans 'Hide' %}";
|
|
} else {
|
|
orphansList.style.display = 'none';
|
|
button.innerText = "{% trans 'Show' %}";
|
|
}
|
|
}
|
|
|
|
function deleteOrphans() {
|
|
document.getElementById('delete-form').delete_orphans.value = 'true';
|
|
document.getElementById('delete-form').submit();
|
|
}
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|
|
|
|
|