Compare commits

..

1 Commits

Author SHA1 Message Date
Ariel Rin
28928d2f8d Merge branch 'user-agents' into 'master'
Proposal: User-Agent Consistency

See merge request allianceauth/allianceauth!1658
2025-03-08 20:25:35 +00:00
21 changed files with 81 additions and 95 deletions

View File

@ -1,24 +1,24 @@
{% load theme_tags %} {% load theme_tags %}
{% load static %} {% load static %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" {% theme_html_tags %}> <html lang="en">
<head> <head>
<!-- Required meta tags -->
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- End Required meta tags --> <meta name="description" content="">
<meta name="author" content="">
<!-- TODO Bundle all the site specific stuff up into its own template for easy override -->
<meta property="og:title" content="{{ SITE_NAME }}">
<meta property="og:image" content="{{ SITE_URL }}{% static 'allianceauth/icons/apple-touch-icon.png' %}">
<meta property="og:description" content="Alliance Auth - An auth system for EVE Online to help in-game organizations manage online service access.">
<!-- Meta tags -->
{% include 'allianceauth/opengraph.html' %}
{% include 'allianceauth/icons.html' %} {% include 'allianceauth/icons.html' %}
<!-- Meta tags -->
<title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title> <title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title>
{% theme_css %} {% theme_css %}
{% include 'bundles/fontawesome.html' %} {% include 'bundles/fontawesome.html' %}
{% include 'bundles/auth-framework-css.html' %}
{% block extra_include %} {% block extra_include %}
{% endblock %} {% endblock %}

View File

@ -36,7 +36,7 @@
<th class="text-center">{% translate "Character" %}</th> <th class="text-center">{% translate "Character" %}</th>
<th class="text-center">{% translate "System" %}</th> <th class="text-center">{% translate "System" %}</th>
<th class="text-center">{% translate "Ship" %}</th> <th class="text-center">{% translate "Ship" %}</th>
<th class="text-center">{% translate "EVE time" %}</th> <th class="text-center">{% translate "Eve Time" %}</th>
<th></th> <th></th>
</tr> </tr>

View File

@ -72,7 +72,7 @@
<tr> <tr>
<th class="text-center">{% translate "Fleet" %}</th> <th class="text-center">{% translate "Fleet" %}</th>
<th class="text-center">{% translate "Creator" %}</th> <th class="text-center">{% translate "Creator" %}</th>
<th class="text-center">{% translate "EVE time" %}</th> <th class="text-center">{% translate "Eve Time" %}</th>
<th class="text-center">{% translate "Duration" %}</th> <th class="text-center">{% translate "Duration" %}</th>
<th class="text-center">{% translate "Edit" %}</th> <th class="text-center">{% translate "Edit" %}</th>
</tr> </tr>

View File

@ -41,7 +41,7 @@
<th scope="col" class="text-center">{% translate "Character" %}</th> <th scope="col" class="text-center">{% translate "Character" %}</th>
<th scope="col" class="text-center">{% translate "System" %}</th> <th scope="col" class="text-center">{% translate "System" %}</th>
<th scope="col" class="text-center">{% translate "Ship" %}</th> <th scope="col" class="text-center">{% translate "Ship" %}</th>
<th scope="col" class="text-center">{% translate "EVE time" %}</th> <th scope="col" class="text-center">{% translate "Eve Time" %}</th>
</tr> </tr>
{% for fat in fats %} {% for fat in fats %}
@ -89,7 +89,7 @@
<th scope="col" class="text-center">{% translate "Name" %}</th> <th scope="col" class="text-center">{% translate "Name" %}</th>
<th scope="col" class="text-center">{% translate "Creator" %}</th> <th scope="col" class="text-center">{% translate "Creator" %}</th>
<th scope="col" class="text-center">{% translate "Fleet" %}</th> <th scope="col" class="text-center">{% translate "Fleet" %}</th>
<th scope="col" class="text-center">{% translate "EVE time" %}</th> <th scope="col" class="text-center">{% translate "Eve Time" %}</th>
<th scope="col" class="text-center">{% translate "Duration" %}</th> <th scope="col" class="text-center">{% translate "Duration" %}</th>
<th scope="col" class="text-center">{% translate "Edit" %}</th> <th scope="col" class="text-center">{% translate "Edit" %}</th>
</tr> </tr>

View File

@ -2,8 +2,7 @@
{# {% include "framework/header/page-header.html" with title="Foobar" subtitle="Barfoo" %}#} {# {% include "framework/header/page-header.html" with title="Foobar" subtitle="Barfoo" %}#}
{% if title %} {% if title %}
<header class="aa-page-header mb-3"> <h1 class="page-header text-center mb-3">
<h1 class="page-header text-center">
{{ title }} {{ title }}
{% if subtitle %} {% if subtitle %}
@ -11,5 +10,4 @@
<small class="text-muted">{{ subtitle }}</small> <small class="text-muted">{{ subtitle }}</small>
{% endif %} {% endif %}
</h1> </h1>
</header>
{% endif %} {% endif %}

View File

@ -14,7 +14,7 @@
<th class="text-center">{% translate "Operation" %}</th> <th class="text-center">{% translate "Operation" %}</th>
<th class="text-center">{% translate "Type" %}</th> <th class="text-center">{% translate "Type" %}</th>
<th class="text-center">{% translate "Form Up System" %}</th> <th class="text-center">{% translate "Form Up System" %}</th>
<th class="text-center">{% translate "EVE time" %}</th> <th class="text-center">{% translate "EVE Time" %}</th>
</tr> </tr>
</thead> </thead>

View File

@ -25,7 +25,7 @@
<div> <div>
<div class="text-center mb-3"> <div class="text-center mb-3">
<div class="badge bg-primary text-start"> <div class="badge bg-primary text-start">
<b>{% translate "Current EVE time:" %}</b> <b>{% translate "Current Eve Time:" %}</b>
<span id="current-time"></span> <span id="current-time"></span>
</div> </div>
</div> </div>
@ -127,8 +127,8 @@
}; };
/** /**
* Get the current EVE time as a string * Get the current Eve time as a string
* @returns {string} EVE time string * @returns {string} Eve time string
*/ */
const updateClock = () => { const updateClock = () => {
document.getElementById("current-time").innerHTML = getCurrentEveTimeString(); document.getElementById("current-time").innerHTML = getCurrentEveTimeString();

View File

@ -1,48 +1,49 @@
[program:beat] [program:beat]
command = {{ celery }} -A {{ project_name }} beat command={{ celery }} -A {{ project_name }} beat
directory = {{ project_directory }} directory={{ project_directory }}
user = allianceserver user=allianceserver
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log stdout_logfile={{ project_directory }}/log/beat.log
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log stderr_logfile={{ project_directory }}/log/beat.log
autostart = true autostart=true
autorestart = true autorestart=true
startsecs = 10 startsecs=10
priority = 998 priority=998
[program:worker] [program:worker]
command = {{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=5 -n %(program_name)s_%(process_num)02d command={{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=5 -n %(program_name)s_%(process_num)02d
directory = {{ project_directory }} directory={{ project_directory }}
user = allianceserver user=allianceserver
numprocs = 1 numprocs=1
process_name = %(program_name)s_%(process_num)02d process_name=%(program_name)s_%(process_num)02d
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log stdout_logfile={{ project_directory }}/log/worker.log
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log stderr_logfile={{ project_directory }}/log/worker.log
autostart = true autostart=true
autorestart = true autorestart=true
startsecs = 10 startsecs=10
stopwaitsecs = 600 stopwaitsecs = 600
killasgroup = true killasgroup=true
priority = 998 priority=998
{% if gunicorn %} {% if gunicorn %}
[program:gunicorn] [program:gunicorn]
user = allianceserver user = allianceserver
directory = {{ project_directory }} directory={{ project_directory }}
command = {{ gunicorn }} {{ project_name }}.wsgi --workers=3 --timeout 120 command={{ gunicorn }} {{ project_name }}.wsgi --workers=3 --timeout 120
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log stdout_logfile={{ project_directory }}/log/gunicorn.log
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log stderr_logfile={{ project_directory }}/log/gunicorn.log
autostart = true autostart=true
autorestart = true autorestart=true
stopsignal = INT stopsignal=INT
{% endif %} {% endif %}
[eventlistener:memmon] [eventlistener:memmon]
command = {{ memmon }} -p worker_00=256MB -p gunicorn=256MB command={{ memmon }} -p worker_00=256MB -p gunicorn=256MB
directory = {{ project_directory }} directory={{ project_directory }}
events = TICK_60 events=TICK_60
stdout_logfile = {{ project_directory }}/log/memmon.log stdout_logfile={{ project_directory }}/log/memmon.log
stderr_logfile = {{ project_directory }}/log/memmon.log stderr_logfile={{ project_directory }}/log/memmon.log
[group:{{ project_name }}] [group:{{ project_name }}]
programs = beat,worker{% if gunicorn %},gunicorn{% endif %} programs=beat,worker{% if gunicorn %},gunicorn{% endif %}
priority = 999 priority=999

View File

@ -48,9 +48,9 @@
</a> </a>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if perms.mumble.view_connection_history %} {% if request.user.is_superuser %}
<a class="btn btn-primary" type="button" id="btnMumbleConnectionHistory" href="{% url 'mumble:connection_history' %}" title="{% translate 'Mumble Connection History' %}"> <a class="btn btn-primary" type="button" id="btnMumbleConnectionHistory" href="{% url 'mumble:connection_history' %}" title="{% translate 'Mumble Connection History' %}">
<i class="fa-solid fa-clock-rotate-left"></i> History <i class="fa-solid fa-clock-rotate-left"></i> History
</a> </a>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -172,7 +172,7 @@ ul.list-group.list-group-horizontal > li.list-group-item {
} }
} }
/* EVE time in navbar /* eve time in navbar
------------------------------------------------------------------------------------- */ ------------------------------------------------------------------------------------- */
@media all { @media all {
.nav-item-eve-time .eve-time-wrapper { .nav-item-eve-time .eve-time-wrapper {

View File

@ -14,7 +14,7 @@ $(document).ready(() => {
}; };
/** /**
* Start the EVE time clock in the top menu bar * Start the Eve time clock in the top menu bar
*/ */
setInterval(() => { setInterval(() => {
renderClock($('.eve-time-wrapper .eve-time-clock')); renderClock($('.eve-time-wrapper .eve-time-clock'));

View File

@ -28,7 +28,7 @@ const getDurationString = (duration) => { // eslint-disable-line no-unused-vars
}; };
/** /**
* returns the current EVE time as a formatted string * returns the current eve time as a formatted string
* *
* condition: * condition:
* only if moment.js is loaded before, * only if moment.js is loaded before,

View File

@ -12,10 +12,11 @@
<!-- End Required meta tags --> <!-- End Required meta tags -->
<!-- Meta tags --> <!-- Meta tags -->
{% include 'allianceauth/opengraph.html' %} <!-- TODO Bundle all the site specific stuff up into its own template for easy override -->
<meta name="description" content="">
<meta name="author" content="">
{% include 'allianceauth/icons.html' %} {% include 'allianceauth/icons.html' %}
<!-- Meta tags --> <!-- Meta tags -->
<title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title> <title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title>
{% theme_css %} {% theme_css %}
@ -29,8 +30,7 @@
} }
.nav-padding { .nav-padding {
margin-top: {% header_padding_size %} !important; padding-top: {% header_padding_size %} !important;
max-height: calc(100vh - {% header_padding_size %}) !important;
} }
</style> </style>

View File

@ -1,8 +0,0 @@
{% load static %}
<meta property="og:title" content="{{ SITE_NAME }}">
<meta property="og:image" content="{{ SITE_URL }}{% static 'allianceauth/icons/apple-touch-icon.png' %}">
<meta property="og:description" content="Alliance Auth - An auth system for EVE Online to help in-game organizations manage online service access.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="{{ request.META.HTTP_HOST }}">
<meta property="og:url" content="{{ request.path }}">

View File

@ -20,7 +20,7 @@
<div class="collapse navbar-collapse auth-menus-collapse"> <div class="collapse navbar-collapse auth-menus-collapse">
<ul class="nav navbar-nav navbar-right navbar-pills"> <ul class="nav navbar-nav navbar-right navbar-pills">
<li class="nav-item-eve-time"> <li class="nav-item-eve-time">
<div class="eve-time-wrapper">{% translate "EVE time" %}: <span class="eve-time-clock"></span></div> <div class="eve-time-wrapper">{% translate "Eve Time" %}: <span class="eve-time-clock"></span></div>
</li> </li>
{% if user.is_authenticated %} {% if user.is_authenticated %}

View File

@ -1,3 +1,3 @@
{% load static %} {% load static %}
<img src="{% static 'allianceauth/images/auth-logo.svg' %}" width="{{ logo_width|default:"128px" }}" height="{% if logo_height %}{{ logo_height }}{% else %}{{ logo_width|default:"128px" }}{% endif %}" alt="{{ SITE_NAME }}"> <img src="{% static 'allianceauth/images/auth-logo.svg' %}" width="{{ logo_width|default:"128px" }}" height="{% if logo_height %}{{ logo_ }}{% else %}{{ logo_width|default:"128px" }}{% endif %}" alt="{{ SITE_NAME }}">

View File

@ -66,7 +66,7 @@ class TimerForm(forms.ModelForm):
future_time = datetime.timedelta(days=days_left, hours=hours_left, minutes=minutes_left) future_time = datetime.timedelta(days=days_left, hours=hours_left, minutes=minutes_left)
current_time = timezone.now() current_time = timezone.now()
eve_time = current_time + future_time eve_time = current_time + future_time
logger.debug(f"Determined timer EVE time is {eve_time} - current time {current_time}, adding {future_time}") logger.debug(f"Determined timer eve time is {eve_time} - current time {current_time}, adding {future_time}")
elif absolute_time: elif absolute_time:
# Use absolute time # Use absolute time
eve_time = absolute_time eve_time = absolute_time

View File

@ -15,7 +15,7 @@
<th class="text-center">{% translate "Timer" %}</th> <th class="text-center">{% translate "Timer" %}</th>
<th class="text-center">{% translate "Type" %}</th> <th class="text-center">{% translate "Type" %}</th>
<th class="text-center">{% translate "System" %}</th> <th class="text-center">{% translate "System" %}</th>
<th class="text-center">{% translate "EVE time" %}</th> <th class="text-center">{% translate "EVE Time" %}</th>
</tr> </tr>
</thead> </thead>

View File

@ -9,7 +9,7 @@
<th class="text-center">{% translate "Objective" %}</th> <th class="text-center">{% translate "Objective" %}</th>
<th class="text-center">{% translate "System" %}</th> <th class="text-center">{% translate "System" %}</th>
<th class="text-center">{% translate "Structure" %}</th> <th class="text-center">{% translate "Structure" %}</th>
<th class="text-center">{% translate "EVE time" %}</th> <th class="text-center">{% translate "Eve Time" %}</th>
<th class="text-center">{% translate "Local Time" %}</th> <th class="text-center">{% translate "Local Time" %}</th>
<th class="text-center">{% translate "Creator" %}</th> <th class="text-center">{% translate "Creator" %}</th>

View File

@ -29,7 +29,7 @@
<div class="allianceauth-timerboard"> <div class="allianceauth-timerboard">
<div class="col-lg-12 text-center mb-3"> <div class="col-lg-12 text-center mb-3">
<div class="badge bg-primary text-start"> <div class="badge bg-primary text-start">
<span>{% translate "Current EVE time:" %}</span> <span>{% translate "Current Eve Time:" %}</span>
<span id="current-time"></span> <span id="current-time"></span>
</div> </div>
</div> </div>

View File

@ -81,7 +81,7 @@ Example implementation for a celery chain:
```python ```python
from allianceauth.services.hooks import get_extension_logger from allianceauth.services.hooks import get_extension_logger
from celery import shared_task, group from celery import shared_task, chain
logger = get_extension_logger(__name__) logger = get_extension_logger(__name__)
@ -98,23 +98,18 @@ def long_runner():
task_signature = example.si() task_signature = example.si()
my_tasks.append(task_signature) my_tasks.append(task_signature)
group(my_tasks).delay() chain(my_tasks).delay()
``` ```
In this example, we first add 10 example tasks that need to run one after the other to a list. This can be done by creating a so-called signature for a task. Those signatures are a kind of wrapper for tasks and can be used in various ways to compose work flow for tasks. In this example, we first add 10 example tasks that need to run one after the other to a list. This can be done by creating a so-called signature for a task. Those signatures are a kind of wrapper for tasks and can be used in various ways to compose work flow for tasks.
The list of task signatures is then converted to a chain and started asynchronously. The list of task signatures is then converted to a chain and started asynchronously.
:::{note}
In this example we import group to execute all tasks independently.
If you wish to run them in order (and stop if a tasks fail) you can use `celery.chain` instead of `celery.group`
For more information on signature and work flows see the official documentation on [Canvas](https://docs.celeryproject.org/en/latest/userguide/canvas.html).
:::
:::{hint} :::{hint}
In our example we use ``si()``, which is a shortcut for "immutable signatures" and prevents us from having to deal with result sharing between tasks. In our example we use ``si()``, which is a shortcut for "immutable signatures" and prevents us from having to deal with result sharing between tasks.
For more information on signature and work flows see the official documentation on `Canvas <https://docs.celeryproject.org/en/latest/userguide/canvas.html>`_.
In this context, please note that Alliance Auth currently only supports chaining because all other variants require a so-called results back, which Alliance Auth does not have. In this context, please note that Alliance Auth currently only supports chaining because all other variants require a so-called results back, which Alliance Auth does not have.
::: :::