status-page / status-page Goto Github PK
View Code? Open in Web Editor NEWOpen Source Statuspage Software
Home Page: https://docs.status-page.dev
License: Apache License 2.0
Open Source Statuspage Software
Home Page: https://docs.status-page.dev
License: Apache License 2.0
Originally posted by sparthe123 December 28, 2022
Hi Team,
I added email configuration in configuration.py, but subscription verification emails are not working.. and also there is no log in mail server from the application. Is there any other place I need to configure mail setup
Where can I check the application logs ?
.
2.0.0 (Preview)
Desktop (please complete the following information):
Smartphone (please complete the following information):
No response
I'm always frustrated when creating a new incident/maintenance, I receive 2 emails:
Receiving only 1 creation email when creating incident/maintenance that contains all the information.
Receiving 1 update email when updating an existing incident/maintenance.
...
...
While modifying the TIME_ZONE and all date formatting to the configuration.py, the date format and orientation are not applied and stay in original UTC/US way.
# Time zone (default: UTC)
TIME_ZONE = 'CET'
# Date/time formatting. See the following link for supported formats:
# https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date
DATE_FORMAT = 'j N Y'
SHORT_DATE_FORMAT = 'd-m-Y'
TIME_FORMAT = 'G:i a'
SHORT_TIME_FORMAT = 'H:i:s'
DATETIME_FORMAT = 'j N Y, G:i'
SHORT_DATETIME_FORMAT = 'd-m-Y H:i'
I've check the docs of django for cheking what should I put over there :/
2.0.0 (Preview)
Desktop (please complete the following information):
Smartphone (please complete the following information):
Not sure if this related
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: 12:31:05 Registering birth
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: /opt/status-page/venv/lib/python3.10/site-packages/rq_scheduler/utils.py:28: FutureWarning: Version 0.22.0+ of crontab will use datetime.utcnow() and
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: datetime.utcfromtimestamp() instead of datetime.now() and
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: datetime.fromtimestamp() as was previous. This had been a bug, which will be
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: remedied. If you would like to keep the *old* behavior:
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: `ct.next(..., default_utc=False)` . If you want to use the new behavior *now*:
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: `ct.next(..., default_utc=True)`. If you pass a datetime object with a tzinfo
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: attribute that is not None, timezones will *just work* to the best of their
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: ability. There are tests...
Aug 11 12:31:05 ninja-status-vincent-d01 python3[3114]: next_time = cron.next(now=now, return_datetime=True)
(this has already corrected on my side)
The file statuspage/utilities/templatetags/helpers.py has the following typo
@register.filter
def get_historic_status(value: Component) -> Any:
"""
Template to returm historic status
"""
num_days = 90
today = make_aware(datetime.datetime.today())
start_date = today + datetime.timedelta(days=1)
end_date = start_date - datetime.timedelta(days=num_days)
date_list = [end_date + datetime.timedelta(days=x) for x in range(num_days)]
component_incidents = value.incidents.all()
date_incidents = []
for date in date_list:
end = date + datetime.timedelta(days=1)
incidents = list(filter(lambda i: date <= i.created <= end, component_incidents))
hover_color = 'hover:bg-green-600'
color = 'bg-green-500'
if len(list(filter(lambda i: i.impcat == IncidentImpactChoices.MINOR, incidents))) > 0:
hover_color = 'hover:bg-yellow-600'
color = 'bg-yellow-500'
if len(list(filter(lambda i: i.impcat == IncidentImpactChoices.MAJOR, incidents))) > 0:
hover_color = 'hover:bg-orange-600'
color = 'bg-orange-500'
if len(list(filter(lambda i: i.impcat == IncidentImpactChoices.CRITICAL, incidents))) > 0:
hover_color = 'hover:bg-red-600'
color = 'bg-red-500'
date_incidents.append({
'date': date,
'hover_color': hover_color,
'color': color,
'incidents': incidents
})
return date_incidents
This raises the error that impcat is undefined which results in an http error 500 on the status-page -> I replaced "impcat" with "impact" and it started working again.
N/A
N/A
2.0.0 (Preview)
N/A
Internal Server Error: /
Traceback (most recent call last):
File "/opt/status-page/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
response = get_response(request)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch
return handler(request, *args, **kwargs)
File "/opt/status-page/statuspage/statuspage/views/__init__.py", line 115, in get
return render(request, self.template_name, {
File "/opt/status-page/venv/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 321, in render
return nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 541, in render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 321, in render
return nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 189, in render
values = self.sequence.resolve(context, ignore_failures=True)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 742, in resolve
new_obj = func(obj, *arg_vals)
File "/opt/status-page/statuspage/utilities/templatetags/helpers.py", line 262, in get_historic_status
if len(list(filter(lambda i: i.impcat == IncidentImpactChoices.MINOR, incidents))) > 0:
File "/opt/status-page/statuspage/utilities/templatetags/helpers.py", line 262, in <lambda>
if len(list(filter(lambda i: i.impcat == IncidentImpactChoices.MINOR, incidents))) > 0:
AttributeError: 'Incident' object has no attribute 'impcat'
Opening /api/docs/
produces an error message.
/api/docs/
2.0.0 (Preview)
Internal Server Error: /api/docs/
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
response = get_response(request)
File "/usr/local/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/views.py", line 34, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/django/utils/decorators.py", line 134, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/django/views/decorators/vary.py", line 21, in inner_func
response = func(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 55, in wrapped_view
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/usr/local/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/usr/local/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/usr/local/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/views.py", line 94, in get
schema = generator.get_schema(request, self.public)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/generators.py", line 248, in get_schema
paths, prefix = self.get_paths(endpoints, components, request, public)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/generators.py", line 406, in get_paths
operation = self.get_operation(view, path, prefix, method, components, request)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/generators.py", line 448, in get_operation
operation = view_inspector.get_operation(operation_keys)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/view.py", line 45, in get_operation
responses = self.get_responses()
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/view.py", line 180, in get_responses
response_serializers = self.get_response_serializers()
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/view.py", line 235, in get_response_serializers
responses = self.get_default_responses()
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/view.py", line 211, in get_default_responses
default_schema = self.serializer_to_schema(default_schema) or ''
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/base.py", line 438, in serializer_to_schema
return self.probe_inspectors(
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/base.py", line 110, in probe_inspectors
result = method(obj, **kwargs)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/field.py", line 38, in get_schema
return self.probe_field_inspectors(serializer, openapi.Schema, self.use_definitions)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/base.py", line 228, in probe_field_inspectors
return self.probe_inspectors(
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/base.py", line 110, in probe_inspectors
result = method(obj, **kwargs)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/field.py", line 129, in field_to_swagger_object
actual_schema = definitions.setdefault(ref_name, make_schema_definition)
File "/usr/local/lib/python3.10/site-packages/drf_yasg/openapi.py", line 688, in setdefault
ret = maker()
File "/usr/local/lib/python3.10/site-packages/drf_yasg/inspectors/field.py", line 98, in make_schema_definition
for property_name, child in serializer.fields.items():
File "/usr/local/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/usr/local/lib/python3.10/site-packages/rest_framework/serializers.py", line 356, in fields
for key, value in self.get_fields().items():
File "/usr/local/lib/python3.10/site-packages/rest_framework/serializers.py", line 1076, in get_fields
field_class, field_kwargs = self.build_field(
File "/usr/local/lib/python3.10/site-packages/rest_framework/serializers.py", line 1222, in build_field
return self.build_unknown_field(field_name, model_class)
File "/usr/local/lib/python3.10/site-packages/rest_framework/serializers.py", line 1340, in build_unknown_field
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Field name `user` is not valid for model `IncidentTemplate`.
I'm always frustrated when updating an existing maintenance/incident. I cannot use my templates.
Have the same option to select a template when updating and creating an incident/maintenance.
...
No response
Regarding: #447 (comment)
Originally posted by sparthe123 March 31, 2023
Can we have the Webhook integration for notification ?
this helps to push notification to more platforms.
Originally posted by BornTKill February 16, 2023
Dear,
I would like to have template when opening an incident/maintenance.
Do you plan to do that ? Or only with API ?
The installation seems to be currently broken. I'm already trying to figure out the cause of this Issue.
.
2.0.0 (Preview)
Desktop (please complete the following information):
Smartphone (please complete the following information):
No response
It would be nice to have an option to use multiple languages for the ui and also for the incidents and maintenance messages
i18n and l19n should both be possible with django itself
https://docs.djangoproject.com/en/4.1/topics/i18n/
Maybe it would be possible to duplicate the message fields for every language
No response
Spambots can submit many email addresses through the unprotected subscribtion form and thus send quite a few mails.
Adding a (privacy friendly) CAPTCHA to the form.
Disabling subscribtions. (Which isn't a true solution)
Maybe I'll find enough time to submit a suitable pull request by myself.
Im am delete tetrick group amd create new = error how fix?
**Additional context**
[2021-07-01 22:11:02] production.ERROR: The payload is invalid. {"exception":"[object] (Illuminate\\Contracts\\Encryption\\DecryptException(code: 0): The payload is invalid. at /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php:196)
[stacktrace]
#0 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php(137): Illuminate\\Encryption\\Encrypter->getJsonPayload()
#1 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php(165): Illuminate\\Encryption\\Encrypter->decrypt()
#2 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\\Encryption\\Encrypter->decryptString()
#3 /var/www/statuspage/app/Models/Setting.php(22): Illuminate\\Support\\Facades\\Facade::__callStatic()
#4 /var/www/statuspage/app/Console/Commands/FetchUptimeRobotData.php(48): App\\Models\\Setting::getString()
#5 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): App\\Console\\Commands\\FetchUptimeRobotData->handle()
#6 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#7 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#8 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#9 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call()
#10 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()
#11 /var/www/statuspage/vendor/symfony/console/Command/Command.php(299): Illuminate\\Console\\Command->execute()
#12 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()
#13 /var/www/statuspage/vendor/symfony/console/Application.php(978): Illuminate\\Console\\Command->run()
#14 /var/www/statuspage/vendor/symfony/console/Application.php(295): Symfony\\Component\\Console\\Application->doRunCommand()
#15 /var/www/statuspage/vendor/symfony/console/Application.php(167): Symfony\\Component\\Console\\Application->doRun()
#16 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Console/Application.php(92): Symfony\\Component\\Console\\Application->run()
#17 /var/www/statuspage/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()
#18 /var/www/statuspage/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#19 {main}
"}
I'm always frustrated because I want to control our communication.
When I update manually an incedent/ maintenance with an template (starting message, end message...) I cannot change the status of the componant.
I cannot use the "automatic status update" because the communication is not good.
Can you add an item list where we can choose the status of all components ?
Thank you
Can you add an item list where we can choose the status of all components ?
Not use an item list but automaticaly change the component status whith the incident's severity or the maintenance's status
No response
There should be at least something in the detail view.
dashboard/maintenances/update/x/
)2.0.0 (Preview)
Desktop (please complete the following information):
No response
Since version 2.3.0, we had an error (error 500) when we click on "add" on the subscribers menu.
I saw when in this new version there was a refactoring of the subscribers code. Could this be the problem?
Thank you
Have the form to add subscribers
2.0.0 (Preview)
No response
We are trying to remove the Management URL: and Subscriber URL: from the email templates.
We have removed in Created.html and Created.txt file in the incidents folder.
But still we are getting the links in emails.
Management URL: status-page.fullaw.in/subscribers/54285679-e187-4dd0-b10b-433a9d75783b/manage
Unsubscribe URL: status-page.fullaw.in/subscribers/54285679-e187-4dd0-b10b-433a9d75783b/unsubscribe
I want to remove this from the email templates.
2.0.0 (Preview)
Desktop (please complete the following information):
Smartphone (please complete the following information):
No response
I'm always frustrated when I request incidents list or details and the created date is missing.
Add 'created' field for GET /incidents/incidents
none
No response
Situation:
Two components are created: "A" and "B"
When I create an issue for A, people who are only subscribed to B also get the email notification.
This is obviously wrong behaviour.
Only people who subscribed to A should get an E-Mail notification.
See description.
2.0.0 (Preview)
Not important.
No response
I'm always frustrated when I add a suscriber, I cannot do it without sending a verification email.
Have the choice to send or not the verification email. If not send, validate the user in database directly
Have the possibility to validate the verification in the backoffice
No response
When we create an incident or a maintenance we have the option visibility to show it on the status page.
Is it possible to made an option 'send email' to have the choice to send the email or not ?
So we can add an incident/maintenance on the status page without sending an email.
Thank you!
Add a checkbox on indident/maintenance creation and editing forms.
I think it is no necessary to add this checkbox on templates.
Add a checkbox on indident/maintenance creation and editing forms.
I think it is no necessary to add this checkbox on templates.
No response
Dear @herrtxbias
I reopen the issue because I have upgrade to 2.2.4 and I still have the issue
When I create a maintenance/incident, only 2 of 3 subscribers (randomly) are receiving the emails.
For my test I have 3 subscribers with same notification options.
No failed task in the admin.
I have upgrade to 2.2.4 and I still have the issue :
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: connect from localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: 329237CE74: client=localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/cleanup[103203]: 329237CE74: [email protected]
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 329237CE74: from=<demo-status@ xxx.fr>, size=6020, nrcpt=1 (queue active)
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: connect from localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: 3B7647E605: client=localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/cleanup[103203]: 3B7647E605: [email protected]
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 3B7647E605: from=<[email protected]>, size=6026, nrcpt=1 (queue active)
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: connect from localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: 4448C7E606: client=localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/cleanup[103203]: 4448C7E606: [email protected]
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 4448C7E606: from=<demo-status@ xxx.fr>, size=6002, nrcpt=1 (queue active)
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: connect from localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: 4D4F17E607: client=localhost[127.0.0.1]
Mar 30 15:12:10 prod-XXXX-01 postfix/cleanup[103203]: 4D4F17E607: [email protected]
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 4D4F17E607: from=<demo-status@ xxx.fr >, size=6006, nrcpt=1 (queue active)
Mar 30 15:12:10 prod-XXXX-01 postfix/smtpd[103200]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:12:10 prod-XXXX-01 postfix/smtp[103206]: 3B7647E605: to=<**subcriber1**@xxx>, relay=aspmx.l.google.com[173.194.76.27]:25, delay=0.35, delays=0/0.01/0.11/0.22, dsn=2.0.0, status=sent (250 2.0.0 OK 1680189130 j10-20020adfe50a000000b002c57de36900si26514979wrm.1008 - gsmtp)
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 3B7647E605: removed
Mar 30 15:12:10 prod-XXXX-01 postfix/smtp[103204]: 329237CE74: to=< **subcriber2**@xxx>, relay=aspmx.l.google.com[2a00:1450:400c:c07::1a]:25, delay=0.41, delays=0.01/0.01/0.14/0.24, dsn=2.0.0, status=sent (250 2.0.0 OK 1680189130 p9-20020a5d4589000000b002c6eb5a2d5esi26459093wrq.710 - gsmtp)
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 329237CE74: removed
Mar 30 15:12:10 prod-XXXX-01 postfix/smtp[103210]: 4D4F17E607: to=< **subcriber3**@xxx>, relay=gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1b]:25, delay=0.42, delays=0/0.02/0.27/0.13, dsn=5.7.1, status=bounced (host gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1b] said: 550-5.7.1 [2001:41d0:302:1000::21a9] Messages missing a valid messageId header 550 5.7.1 are not accepted. w13-20020adfec4d000000b002d789ce832dsi22225037wrn.89 - gsmtp (in reply to end of DATA command))
Mar 30 15:12:10 prod-XXXX-01 postfix/cleanup[103203]: B5EBE7E605: message-id=<[email protected]>
Mar 30 15:12:10 prod-XXXX-01 postfix/bounce[103211]: 4D4F17E607: sender non-delivery notification: B5EBE7E605
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: B5EBE7E605: from=<>, size=8413, nrcpt=1 (queue active)
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 4D4F17E607: removed
Mar 30 15:12:10 prod-XXXX-01 postfix/smtp[103208]: 4448C7E606: to=< **subcriber4**@xxx>, relay=gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1b]:25, delay=0.51, delays=0/0.01/0.31/0.18, dsn=5.7.1, status=bounced (host gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1b] said: 550-5.7.1 [2001:41d0:302:1000::21a9] Messages missing a valid messageId header 550 5.7.1 are not accepted. j11-20020a056000124b00b002d312631370si27026380wrx.279 - gsmtp (in reply to end of DATA command))
Mar 30 15:12:10 prod-XXXX-01 postfix/cleanup[103203]: C173A7E605: message-id=<[email protected]>
Mar 30 15:12:10 prod-XXXX-01 postfix/bounce[103211]: 4448C7E606: sender non-delivery notification: C173A7E605
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: C173A7E605: from=<>, size=8405, nrcpt=1 (queue active)
Mar 30 15:12:10 prod-XXXX-01 postfix/qmgr[61915]: 4448C7E606: removed
I have removed working subscribers (1 and 2), updated twice the same maintenance and I had this :
First update only subsriber3 received email :
Mar 30 15:26:16 prod-xxx-01 postfix/smtpd[103342]: connect from localhost[127.0.0.1]
Mar 30 15:26:16 prod-xxx-01 postfix/smtpd[103342]: A6F317E605: client=localhost[127.0.0.1]
Mar 30 15:26:16 prod-xxx-01 postfix/cleanup[103345]: A6F317E605: [email protected]
Mar 30 15:26:16 prod-xxx-01 postfix/qmgr[61915]: A6F317E605: from=<[email protected]>, size=4979, nrcpt=1 (queue active)
Mar 30 15:26:16 prod-xxx-01 postfix/smtpd[103342]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:26:16 prod-xxx-01 postfix/smtpd[103342]: connect from localhost[127.0.0.1]
Mar 30 15:26:16 prod-xxx-01 postfix/smtpd[103342]: B36187E607: client=localhost[127.0.0.1]
Mar 30 15:26:16 prod-xxx-01 postfix/cleanup[103345]: B36187E607: [email protected]
Mar 30 15:26:16 prod-xxx-01 postfix/qmgr[61915]: B36187E607: from=<[email protected]>, size=4983, nrcpt=1 (queue active)
Mar 30 15:26:16 prod-xxx-01 postfix/smtpd[103342]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:26:17 prod-xxx-01 postfix/smtp[103348]: B36187E607: to=<**subsriber3**@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.133.27]:25, delay=0.66, delays=0/0.02/0.37/0.27, dsn=2.0.0, status=sent (250 2.0.0 OK 1680189977 t7-20020adff047000000b002da650f451csi19273855wro.284 - gsmtp)
Mar 30 15:26:17 prod-xxx-01 postfix/qmgr[61915]: B36187E607: removed
Mar 30 15:26:17 prod-xxx-01 postfix/smtp[103346]: A6F317E605: to=<**subsriber4**@gmail.com>, relay=gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1a]:25, delay=0.78, delays=0.01/0.01/0.41/0.34, dsn=5.7.1, status=bounced (host gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1a] said: 550-5.7.1 [2001:41d0:302:1000::21a9] Messages missing a valid messageId header 550 5.7.1 are not accepted. a5-20020a5d5085000000b002d1a77f97c8si29352479wrt.341 - gsmtp (in reply to end of DATA command))
Mar 30 15:26:17 prod-xxx-01 postfix/cleanup[103345]: 724477E784: message-id=<[email protected]>
Mar 30 15:26:17 prod-xxx-01 postfix/bounce[103349]: A6F317E605: sender non-delivery notification: 724477E784
Mar 30 15:26:17 prod-xxx-01 postfix/qmgr[61915]: 724477E784: from=<>, size=7380, nrcpt=1 (queue active)
Mar 30 15:26:17 prod-xxx-01 postfix/qmgr[61915]: A6F317E605: removed
Second Update both receive email :
Mar 30 15:27:43 prod-xxx-01 postfix/smtpd[103342]: connect from localhost[127.0.0.1]
Mar 30 15:27:43 prod-xxx-01 postfix/smtpd[103342]: AB2507CE74: client=localhost[127.0.0.1]
Mar 30 15:27:43 prod-xxx-01 postfix/cleanup[103345]: AB2507CE74: [email protected]
Mar 30 15:27:43 prod-xxx-01 postfix/qmgr[61915]: AB2507CE74: from=<[email protected]>, size=4995, nrcpt=1 (queue active)
Mar 30 15:27:43 prod-xxx-01 postfix/smtpd[103342]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:27:43 prod-xxx-01 postfix/smtpd[103342]: connect from localhost[127.0.0.1]
Mar 30 15:27:43 prod-xxx-01 postfix/smtpd[103342]: B52AF7E607: client=localhost[127.0.0.1]
Mar 30 15:27:43 prod-xxx-01 postfix/cleanup[103345]: B52AF7E607: [email protected]
Mar 30 15:27:43 prod-xxx-01 postfix/qmgr[61915]: B52AF7E607: from=<demo-status@ xxx.fr >, size=4999, nrcpt=1 (queue active)
Mar 30 15:27:43 prod-xxx-01 postfix/smtpd[103342]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 30 15:27:44 prod-xxx-01 postfix/smtp[103346]: B52AF7E607: to=<**subsriber3**@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.133.27]:25, delay=0.27, delays=0/0/0.08/0.18, dsn=2.0.0, status=sent (250 2.0.0 OK 1680190064 e5-20020adffc45000000b002d9033d5eb6si20446202wrs.191 - gsmtp)
Mar 30 15:27:44 prod-xxx-01 postfix/qmgr[61915]: B52AF7E607: removed
Mar 30 15:27:44 prod-xxx-01 postfix/smtp[103348]: AB2507CE74: to=<**subsriber4**@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.133.27]:25, delay=0.58, delays=0/0/0.08/0.49, dsn=2.0.0, status=sent (250 2.0.0 OK 1680190064 v20-20020a5d5914000000b002c5587cbe64si30747698wrd.186 - gsmtp)
Mar 30 15:27:44 prod-xxx-01 postfix/qmgr[61915]: AB2507CE74: removed
Any ideas ?
2.0.0 (Preview)
No response
Describe the bug
[previous exception] [object] (PDOException(code: 22001): SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'text' at row 1 at /var/www/status-page/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:115)
Can you add a template selector when create a new incident/maintenance.
...
...
2.0.0 (Preview)
...
No response
Dear,
i have create a incident template and a maintenance template.
But when creating an incident/maintenance from this template is not working
it's empty.
Pre fill incident/maintenance from template.
.
2.0.0 (Preview)
.
No response
Please extend the string length for Text aria in Incidents and Maintenance.
Now you can post a maximum of 1024 characters.
Also if this is possible, please set simple text without Markdown syntax. Because it does not work fine.
Otherwise the panel is very cool, you are a very cool expert, thank you in advance.
= 2.0.0 (Stable)
Desktop (please complete the following information):
statuspage@statuspage ERROR: value too long for type character varying(1024)
statuspage@statuspage STATEMENT: INSERT INTO "maintenances_maintenanceupdate" ("created", "last_updated", "text", "new_status", "maintenance_id", "status", "user_id") VALUES ('2022-12-16T12:40:15.976833+00:00'::timestamptz, '2022-12-16T12:40:15.976845+00:00'::timestamptz, 'yuxepknagwckwgfsehlrvqwklfrkskqbcwtdiqdepiugjwwrshpnpibqcbssliidjnrvdeakpmjsmbylbkjhlooogphgwqljndmsgcupmisnnsnpemtaalxckeveesaklyflhmmtiiofpzmqrycvimuqbdbulokcgqbvnsosbiyxxwhtefqvgipqfaubfzistyynduixzzytjytsvurwcwsliqvhinnvjgqiynsznqtbmfoqxqmqkrmtobzndfgdrtkdcesmoqkyafgoavsygdgowjbwevlqeljfoulzgabvdlyzrrumztgledosvqkeufxlpqbvatrfvwkgszeujqdvxifialtwklfdgqrqvyouabobwmmjydrzerapqbkixsdcbsouycabamdcayyudrsxwtjhvnjziqwbncivdyrhsoagzucjveuwdmnfhuyappdiykhgjnhyabfjvsoilopjwsjveoylefugsplvkmnwlutxsscmfikuilbgxowzloverxnjaynkvkupdbwniwjhaxdgubntiaoswdysanjyjbtnscwqptxtehevdjexeywberwdfbhudizalzlabugesujnoysyjdqsjwyvxyfjrfsauntngxhznrqkretoszymssiwgcjdghgllqxhrrquqsyazhcbwomftujjqkxuvatnjhncfpisulaobxpthsgslsksmxmnrqdaviqilbjhdelgiglyusveanrmrbhjnxlqxptqwvikbypnhwukatwryjxgwyeitpafaazanlclqbxsuyrxlacucnniwasfumbvxcuprrfkslhvxjpznjbeyuvxrokzfrqtxrhcqofyrxpcxxgvdchyuzbbitylsdsrfdpnbfaxqbmezyonuhbzgjvvrmsromekpwerferztycpcnkdfrchpykdtidoeoekzqcutlhrltxknqcgdegzhsqrdlipnjgbpseosnkxtubfeiwkenmkkhwjvfmbigsghyrdtnyngdsfgkjgg', false, 26, 'schedule', 1) RETURNING "maintenances_maintenanceupdate"."id"
It is certainly a useful feature, but it would be better if you could disable it. Especially when multiple people use the same access, it is not possible to use 2FA properly.
Apart from that, 2FA is fatally broken, but that's another topic.
An configuration option to disable 2FA.
Alternatively a per account setting, if this is possible in Django.
Right now I just abuse a bug or I use the backup tokens.
No response
Hi @herrtxbias,
When I clear on [Resend Verification Mail] button from subscriber menu, I do not receive any email.
No failed task in the admin, and no log on my mail server.
Best regards.
Receive verification email when clicking on [Resend Verification Mail] button
...
2.0.0 (Preview)
...
No response
Hello,
When we create an incident, it does not appear correctly in the history of the page.
It is always 1 day before the real date.
For example, if I create a critical incident on May 17th, it appears in the history as having arrived on May 16th.
Thank you
If we create an incident the May 17th, see it in the components history at May 17th.
2.0.0 (Preview)
Desktop (please complete the following information):
No response
The emails have suddenly ceased triggering.
We have received emails previously. We edited the created.html and created.txt file for the format changes and the emails are stopped triggering..
Can someone help us with the logs path. We are not sure, where to check the email logs.
2.0.0 (Preview)
Desktop (please complete the following information):
Smartphone (please complete the following information):
No response
TO have HTML rendering in header and footer, you need to escape the html with:
in statuspage/templates/base/home.html change ({{ config.CUSTOM_STYLE_HEADER**|safe** }} and {{ config.CUSTOM_STYLE_FOOTER**|safe** }}
{% extends 'base/layout.html' %}
{% block content %}
{% if config.CUSTOM_STYLE_CSS %}
<style>{{ config.CUSTOM_STYLE_CSS }}</style>
{% endif %}
<div class="container mx-auto max-w-4xl pb-8">
<div class="flex flex-col space-y-8 pt-6">
{{ config.CUSTOM_STYLE_HEADER|safe }}
...
{% block home_content %}{% endblock %}
{{ config.CUSTOM_STYLE_FOOTER|safe }}
{% if not config.CUSTOM_STYLE_FOOTER_DISABLE_CORE %}
{% endif %}
</div>
</div>
{% endblock content %}
N/A
2.0.0 (Preview)
Desktop (please complete the following information):
Smartphone (please complete the following information):
No response
When creating an incident with a long message, the message doesnt get cut of when it's to long to match into the field, resulting in the following visual bug:
The text gets broken correctly or cut off.
2.0.0 (Preview)
Desktop (please complete the following information):
No response
Dear @herrtxbias
When creating a new incident/maintenance, we receive email for update and not the one for creation.
receive creation email.
...
2.0.0 (Preview)
...
No response
Dear,
When bulk edit component to update state, I got 500
Internal Server Error: /dashboard/components/edit/
KeyError at /dashboard/components/edit/
"Key 'show_historic_incidents' not found in 'ComponentBulkEditForm'. Choices are: component_group, description, link, order, pk, status, visibility."
Request Method: POST
Request URL: https://demo2-statuspage.quicksign.fr/dashboard/components/edit/
Django Version: 4.1.4
Python Executable: /opt/status-page/venv/bin/python3
Python Version: 3.10.6
Python Path: ['/opt/status-page/statuspage', '/opt/status-page', '/opt/status-page/venv/bin', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/opt/status-page/venv/lib/python3.10/site-packages']
Server time: Fri, 17 Feb 2023 16:13:25 +0100
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_browser_reload',
'django_tables2',
'components',
'extras',
'incidents',
'maintenances',
'users',
'utilities',
'metrics',
'subscribers',
'django_rq',
'drf_yasg',
'queuing',
'django_otp',
'django_otp.plugins.otp_static',
'django_otp.plugins.otp_totp',
'otp_yubikey']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_otp.middleware.OTPMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_browser_reload.middleware.BrowserReloadMiddleware',
'statuspage.middleware.APIVersionMiddleware',
'statuspage.middleware.ObjectChangeMiddleware',
'statuspage.middleware.DynamicConfigMiddleware']
Traceback (most recent call last):
File "/opt/status-page/venv/lib/python3.10/site-packages/django/forms/forms.py", line 182, in __getitem__
field = self.fields[name]
During handling of the above exception ('show_historic_incidents'), another exception occurred:
File "/opt/status-page/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "/opt/status-page/statuspage/utilities/views.py", line 50, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch
return handler(request, *args, **kwargs)
File "/opt/status-page/statuspage/statuspage/views/generic/bulk_views.py", line 210, in post
return render(request, self.template_name, {
File "/opt/status-page/venv/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/backends/django.py", line 62, in render
return self.template.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 322, in render
return nodelist.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 540, in render
values = {key: val.resolve(context) for key, val in self.extra_context.items()}
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 540, in <dictcomp>
values = {key: val.resolve(context) for key, val in self.extra_context.items()}
File "/opt/status-page/venv/lib/python3.10/site-packages/django/template/base.py", line 742, in resolve
new_obj = func(obj, *arg_vals)
File "/opt/status-page/statuspage/utilities/templatetags/form_helpers.py", line 16, in getfield
return form[fieldname]
File "/opt/status-page/venv/lib/python3.10/site-packages/django/forms/forms.py", line 184, in __getitem__
raise KeyError(
Exception Type: KeyError at /dashboard/components/edit/
Exception Value: "Key 'show_historic_incidents' not found in 'ComponentBulkEditForm'. Choices are: component_group, description, link, order, pk, status, visibility."
Raised during: components.views.ComponentBulkEditView
Request information:
USER: ngirardi
GET: No GET data
POST:
csrfmiddlewaretoken = 'P80ERPwCFeRRrTvaGwp3Xbad0EKZt1Uk7uLkyeDzvEJ2FMjCaDO9d6FcHDrqRgGD'
return_url = '/dashboard/components/'
pk = '5'
_delete = ''
FILES: No FILES data
COOKIES:
csrftoken = 'swVQRzh70A2lo3YCEhzgq5F9R9RBypWt'
sessionid = 'ebxgmzv9xlrzt19y66d6akycn5vsiowz'
META:
CONTENT_LENGTH = '158'
CONTENT_TYPE = 'application/x-www-form-urlencoded'
CSRF_COOKIE = 'swVQRzh70A2lo3YCEhzgq5F9R9RBypWt'
CSRF_COOKIE_NEEDS_UPDATE = False
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'fr-FR,fr;q=0.9'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'csrftoken=swVQRzh70A2lo3YCEhzgq5F9R9RBypWt; sessionid=ebxgmzv9xlrzt19y66d6akycn5vsiowz'
HTTP_HOST = '127.0.0.1:8001'
HTTP_ORIGIN = 'https://demo2-statuspage.quicksign.fr/'
HTTP_REFERER = 'https://demo2-statuspage.quicksign.fr/dashboard/components/'
HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15'
HTTP_X_FORWARDED_HOST = '[demo2-statuspage.quicksign.fr](http://demo2-statuspage.quicksign.fr/)'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_REAL_IP = '::ffff:10.10.7.113'
HTTP_X_SSL = '1'
HTTP_X_SSL_CLIENT_CN = '[ssl_c_s_dn(cn)]'
HTTP_X_SSL_CLIENT_DN = '[ssl_c_s_dn]'
HTTP_X_SSL_CLIENT_NOT_BEFORE = '[ssl_c_notbefore]'
HTTP_X_SSL_CLIENT_SERIAL = '[ssl_c_serial,hex]'
HTTP_X_SSL_CLIENT_SHA1 = '[ssl_c_sha1]'
HTTP_X_SSL_CLIENT_VERIFY = '0'
HTTP_X_SSL_CLIENT_VERSION = '[ssl_c_version]'
HTTP_X_SSL_ISSUER = '[ssl_c_i_dn]'
PATH_INFO = '/dashboard/components/edit/'
QUERY_STRING = ''
RAW_URI = '/dashboard/components/edit/'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '57208'
REQUEST_METHOD = 'POST'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8001'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/20.1.0'
gunicorn.socket = <socket.socket fd=10, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8001), raddr=('127.0.0.1', 57208)>
wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f094259dba0>
wsgi.file_wrapper = <class 'gunicorn.http.wsgi.FileWrapper'>
wsgi.input = <gunicorn.http.body.Body object at 0x7f09425cf970>
wsgi.input_terminated = True
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module statuspage.settings
ABSOLUTE_URL_OVERRIDES = {}
ADMINS = [('Nicolas Girardi', '[[email protected]](mailto:[email protected])')]
ALLOWED_HOSTS = ['[demo2-statuspage.quicksign.fr](http://demo2-statuspage.quicksign.fr/)', '10.10.0.5']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = ['statuspage.authentication.ObjectPermissionBackend']
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/status-page/statuspage'
BASE_PATH = ''
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'PASSWORD': '********************'}}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
CACHING_REDIS_DATABASE = 1
CACHING_REDIS_HOST = 'localhost'
CACHING_REDIS_PASSWORD = '********************'
CACHING_REDIS_PORT = 6379
CACHING_REDIS_PROTO = 'redis'
CACHING_REDIS_SENTINELS = []
CACHING_REDIS_SENTINEL_SERVICE = 'default'
CACHING_REDIS_SKIP_TLS_VERIFY = False
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_REGEX_WHITELIST = []
CORS_ORIGIN_WHITELIST = []
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_MASKED = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASE = {'NAME': 'statuspage', 'USER': 'statuspage', 'PASSWORD': '********************', 'HOST': '10.10.0.5', 'PORT': '', 'CONN_MAX_AGE': 300}
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'statuspage', 'USER': 'statuspage', 'PASSWORD': '********************', 'HOST': '10.10.0.5', 'PORT': '', 'CONN_MAX_AGE': 300, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = None
DATETIME_FORMAT = 'N j, Y g:i a'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = '[[email protected]](mailto:[email protected])'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DEVELOPER = False
DISALLOWED_USER_AGENTS = []
EMAIL = {'SERVER': 'localhost', 'PORT': 25, 'USERNAME': '', 'PASSWORD': '********************', 'USE_SSL': False, 'USE_TLS': False, 'TIMEOUT': 10, 'FROM_EMAIL': '[[email protected]](mailto:[email protected])'}
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Status-Page] '
EMAIL_TIMEOUT = 10
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
EXEMPT_VIEW_PERMISSIONS = []
FIELD_CHOICES = {}
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTERS_NULL_CHOICE_LABEL = 'None'
FILTERS_NULL_CHOICE_VALUE = 'null'
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HOSTNAME = 'poc-statuspage-01'
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_browser_reload', 'django_tables2', 'components', 'extras', 'incidents', 'maintenances', 'users', 'utilities', 'metrics', 'subscribers', 'django_rq', 'drf_yasg', 'queuing', 'django_otp', 'django_otp.plugins.otp_static', 'django_otp.plugins.otp_totp', 'otp_yubikey']
INTERNAL_IPS = "('127.0.0.1', '::1')"
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/dashboard/'
LOGIN_REQUIRED = True
LOGIN_TIMEOUT = None
LOGIN_URL = '/dashboard/login/'
LOGOUT_REDIRECT_URL = None
MANAGERS = []
MEDIA_ROOT = '/opt/status-page/statuspage/media'
MEDIA_URL = '/media/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django_otp.middleware.OTPMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django_browser_reload.middleware.BrowserReloadMiddleware', 'statuspage.middleware.APIVersionMiddleware', 'statuspage.middleware.ObjectChangeMiddleware', 'statuspage.middleware.DynamicConfigMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
OTP_ADMIN_HIDE_SENSITIVE_DATA = True
PARAMS = '(<statuspage.config.parameters.ConfigParam object at 0x7f0945ae5090>, <statuspage.config.parameters.ConfigParam object at 0x7f0945ae5060>, <statuspage.config.parameters.ConfigParam object at 0x7f0945ae52a0>, <statuspage.config.parameters.ConfigParam object at 0x7f0945ae5270>, <statuspage.config.parameters.ConfigParam object at 0x7f0945b10910>, <statuspage.config.parameters.ConfigParam object at 0x7f0945b109a0>, <statuspage.config.parameters.ConfigParam object at 0x7f0945155270>, <statuspage.config.parameters.ConfigParam object at 0x7f0945155360>, <statuspage.config.parameters.ConfigParam object at 0x7f09451553c0>, <statuspage.config.parameters.ConfigParam object at 0x7f09451553f0>, <statuspage.config.parameters.ConfigParam object at 0x7f0945155420>, <statuspage.config.parameters.ConfigParam object at 0x7f0945155450>, <statuspage.config.parameters.ConfigParam object at 0x7f0945155480>)'
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PLUGINS = []
PLUGINS_CONFIG = {'sp_uptimerobot': {'uptime_robot_api_key': '********************'}}
PREPEND_WWW = False
REDIS = {'tasks': {'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '********************', 'DATABASE': 0, 'SSL': False}, 'caching': {'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '********************', 'DATABASE': 1, 'SSL': False}}
REST_FRAMEWORK = {'ALLOWED_VERSIONS': ['2.1'], 'COERCE_DECIMAL_TO_STRING': False, 'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.SessionAuthentication', 'statuspage.api.authentication.TokenAuthentication'), 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.OrderingFilter'), 'DEFAULT_METADATA_CLASS': 'statuspage.api.metadata.BulkOperationMetadata', 'DEFAULT_PAGINATION_CLASS': 'statuspage.api.pagination.OptionalLimitOffsetPagination', 'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser', 'rest_framework.parsers.MultiPartParser'), 'DEFAULT_PERMISSION_CLASSES': ('statuspage.api.authentication.TokenPermissions',), 'DEFAULT_RENDERER_CLASSES': ('rest_framework.renderers.JSONRenderer', 'statuspage.api.renderers.FormlessBrowsableAPIRenderer'), 'DEFAULT_VERSION': '2.1', 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', 'SCHEMA_COERCE_METHOD_NAMES': {'retrieve': 'read', 'destroy': 'delete', 'bulk_destroy': 'bulk_delete'}, 'VIEW_NAME_FUNCTION': 'utilities.api.get_view_name'}
REST_FRAMEWORK_VERSION = '2.1'
ROOT_URLCONF = 'statuspage.urls'
RQ_DEFAULT_TIMEOUT = 300
RQ_PARAMS = {'HOST': 'localhost', 'PORT': 6379, 'DB': 0, 'PASSWORD': '********************', 'SSL': False, 'SSL_CERT_REQS': 'required', 'DEFAULT_TIMEOUT': 300}
RQ_QUEUES = {'high': {'HOST': 'localhost', 'PORT': 6379, 'DB': 0, 'PASSWORD': '********************', 'SSL': False, 'SSL_CERT_REQS': 'required', 'DEFAULT_TIMEOUT': 300}, 'default': {'HOST': 'localhost', 'PORT': 6379, 'DB': 0, 'PASSWORD': '********************', 'SSL': False, 'SSL_CERT_REQS': 'required', 'DEFAULT_TIMEOUT': 300}, 'low': {'HOST': 'localhost', 'PORT': 6379, 'DB': 0, 'PASSWORD': '********************', 'SSL': False, 'SSL_CERT_REQS': 'required', 'DEFAULT_TIMEOUT': 300}}
SECRET_KEY = '********************'
SECRET_KEY_FALLBACKS = '********************'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = '[[email protected]](mailto:[email protected])'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'statuspage.settings'
SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
SHORT_DATE_FORMAT = 'Y-m-d'
SHORT_TIME_FORMAT = 'H:i:s'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_URL = 'https://demo2-statuspage.quicksign.fr/'
STATICFILES_DIRS = "('/opt/status-page/statuspage/project-static/dist', '/opt/status-page/statuspage/project-static/img', ('docs', '/opt/status-page/statuspage/project-static/docs'))"
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/status-page/statuspage/static'
STATIC_URL = '/static/'
SWAGGER_SETTINGS = {'DEFAULT_AUTO_SCHEMA_CLASS': 'utilities.custom_inspectors.StatusPageSwaggerAutoSchema', 'DEFAULT_FIELD_INSPECTORS': ['utilities.custom_inspectors.NullableBooleanFieldInspector', 'utilities.custom_inspectors.ChoiceFieldInspector', 'utilities.custom_inspectors.SerializedPKRelatedFieldInspector', 'drf_yasg.inspectors.CamelCaseJSONFilter', 'drf_yasg.inspectors.ReferencingSerializerInspector', 'drf_yasg.inspectors.RelatedFieldInspector', 'drf_yasg.inspectors.ChoiceFieldInspector', 'drf_yasg.inspectors.FileFieldInspector', 'drf_yasg.inspectors.DictFieldInspector', 'drf_yasg.inspectors.JSONFieldInspector', 'drf_yasg.inspectors.SerializerMethodFieldInspector', 'drf_yasg.inspectors.SimpleFieldInspector', 'drf_yasg.inspectors.StringDefaultFieldInspector'], 'DEFAULT_FILTER_INSPECTORS': ['drf_yasg.inspectors.CoreAPICompatInspector'], 'DEFAULT_INFO': 'statuspage.urls.openapi_info', 'DEFAULT_MODEL_DEPTH': 1, 'DEFAULT_PAGINATOR_INSPECTORS': ['utilities.custom_inspectors.NullablePaginatorInspector', 'drf_yasg.inspectors.DjangoRestResponsePagination', 'drf_yasg.inspectors.CoreAPICompatInspector'], 'SECURITY_DEFINITIONS': {'Token': '********************'}, 'VALIDATOR_URL': None}
TASKS_REDIS = {'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '********************', 'DATABASE': 0, 'SSL': False}
TASKS_REDIS_DATABASE = 0
TASKS_REDIS_HOST = 'localhost'
TASKS_REDIS_PASSWORD = '********************'
TASKS_REDIS_PORT = 6379
TASKS_REDIS_SENTINELS = []
TASKS_REDIS_SENTINEL_SERVICE = 'default'
TASKS_REDIS_SENTINEL_TIMEOUT = 10
TASKS_REDIS_SKIP_TLS_VERIFY = False
TASKS_REDIS_SSL = False
TASKS_REDIS_USING_SENTINEL = False
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/opt/status-page/statuspage/templates'], 'APP_DIRS': True, 'OPTIONS': {'builtins': ['utilities.templatetags.builtins.filters', 'utilities.templatetags.builtins.tags'], 'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'statuspage.context_processors.settings_and_registry']}}]
TEMPLATES_DIR = '/opt/status-page/statuspage/templates'
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'g:i a'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'Europe/Paris'
USE_DEPRECATED_PYTZ = True
USE_I18N = True
USE_L10N = False
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
VERSION = '2.1.0'
WSGI_APPLICATION = 'statuspage.wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
.
.
2.0.0 (Preview)
.
No response
Currently, trying to change the Expand value of the metric results in a 500 Internal Server Error.
Message:
[2021-04-12 13:15:09] production.ERROR: Cannot bind property [metric.collapse] without a validation rule present in the [$rules] array on Livewire component: [dashboard.metrics.modals.metric-update-modal]. {"userId":2,"exception":"[object] (Livewire\\Exceptions\\CannotBindToModelDataWithoutValidationRuleException(code: 0): Cannot bind property [metric.collapse] without a validation rule present in the [$rules] array on Livewire component: [dashboard.metrics.modals.metric-update-modal]. at /var/www/status-page/vendor/livewire/livewire/src/ComponentConcerns/HandlesActions.php:25)
So it's been a whole day, during the test we see this behavior.
We are now sure it was a thing.
When you aren't connected on Dashboard, you get an error 500
while you are trying to subscribe yourself.
Go back and retry. You have a print that you are now subscribe.
In fact, when you are back into the dashboard and go to subscribers section, you see the email address.
But with this behavior, you will not be able to receive any alert because, you can't verify your email (it's blocked before).
With the output print, you will see the subscribers section, need to be logged in for subscribing.
For seeing the error, don't forget to enable DEBUG mode into the configuration.py
I'll do a PR right after, we solved this by restoring some codes.
When you subscribe, you'll be able to receive instantly your email verification.
2.0.0 (Preview)
Desktop (please complete the following information):
Smartphone (please complete the following information):
Aug 17 13:22:42 some-server gunicorn[6716]: Internal Server Error: /subscribers/subscribe
Aug 17 13:22:42 some-server gunicorn[6716]: Traceback (most recent call last):
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
Aug 17 13:22:42 some-server gunicorn[6716]: response = get_response(request)
Aug 17 13:22:42 some-server gunicorn[6716]: ^^^^^^^^^^^^^^^^^^^^^
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
Aug 17 13:22:42 some-server gunicorn[6716]: response = wrapped_callback(request, *callback_args, **callback_kwargs)
Aug 17 13:22:42 some-server gunicorn[6716]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 104, in view
Aug 17 13:22:42 some-server gunicorn[6716]: return self.dispatch(request, *args, **kwargs)
Aug 17 13:22:42 some-server gunicorn[6716]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 143, in dispatch
Aug 17 13:22:42 some-server gunicorn[6716]: return handler(request, *args, **kwargs)
Aug 17 13:22:42 some-server gunicorn[6716]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/statuspage/statuspage/views/subscriber.py", line 70, in post
Aug 17 13:22:42 some-server gunicorn[6716]: subscriber.save()
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/statuspage/subscribers/models.py", line 56, in save
Aug 17 13:22:42 some-server gunicorn[6716]: super().save(*args, **kwargs)
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/db/models/base.py", line 814, in save
Aug 17 13:22:42 some-server gunicorn[6716]: self.save_base(
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/db/models/base.py", line 892, in save_base
Aug 17 13:22:42 some-server gunicorn[6716]: post_save.send(
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/dispatch/dispatcher.py", line 176, in send
Aug 17 13:22:42 some-server gunicorn[6716]: return [
Aug 17 13:22:42 some-server gunicorn[6716]: ^
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/dispatch/dispatcher.py", line 177, in <listcomp>
Aug 17 13:22:42 some-server gunicorn[6716]: (receiver, receiver(signal=self, sender=sender, **named))
Aug 17 13:22:42 some-server gunicorn[6716]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/statuspage/extras/signals.py", line 71, in handle_changed_object
Aug 17 13:22:42 some-server gunicorn[6716]: objectchange.user = request.user
Aug 17 13:22:42 some-server gunicorn[6716]: ^^^^^^^^^^^^^^^^^
Aug 17 13:22:42 some-server gunicorn[6716]: File "/opt/status-page/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py", line 266, in __set__
Aug 17 13:22:42 some-server gunicorn[6716]: raise ValueError(
Aug 17 13:22:42 some-server gunicorn[6716]: ValueError: Cannot assign "<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7f76c7895490>>>": "ObjectChange.user" must be a "User" instance.
Hello,
Is it possible to make these changes to the templates?
Thank you very much!
No response
I'm always frustrated when I make a maintenance or an incident. I can not choose the components status.
For maintenance, the status is always to "Operational"
For incident, the status is always to "Degraded Performance"
Is it possible to do a drop menu to choose the status?
Thank you.
No response
See more here: GHSA-4mg9-vhxq-vm7j
Fixed by: #51
Currently, the metric points (if you have activated the feature) are written to the cache every 15 minutes. However, problems can occur if too many points are added within one minute. The job may stop and not finish the cache process, leaving outdated data in the cache.
Deactivate the Metric Cache. Unfortunately, there is currently no other option except to deactivate the metrics cache. If you do not have any problems with the caching process, you can leave this function activated, but please note that this problem may occur sooner or later.
We need to change the way the metric points are loaded from the database. Currently, this process is not very performant and takes a long time. In the next minor release (v1.8.0) this problem will hopefully be solved.
Good morning @herrtxbias
When adding a markdown content, the text is well formatted in status page but the email is not.
Here the result on my status page
Corresponding code :
Email rendering :
Here is the email source
...
...
2.0.0 (Preview)
...
No response
No Ability to see historic status of a component from the public view
Add historic Data bars that show when a Component has been down either across 30,60 or 90 days. Similar to other public offerings like statuspage.io, freshstatus and the likes of
N/A
No response
Describe the bug
Currently, the update note shows up, even if you are running the latest Version.
Additional context
This is due how we get the Current Version. We will change this behaviour in the next fix Update (v1.8.1).
If you are running the latest Version, you can ignore this Message.
We added 140 components with the api and now the website is not useable any more.
I think the many small bars for incidents cause an issue
Website should work normally
2.0.0 (Preview)
Desktop (please complete the following information):
No response
When I try to add some Incident or Maintenance which Resolved/Completed.
I expect it will be added in Datebare on the date I set up.
But it is adding in Datebare as today's.
Example: I have the incident, which was 17.02.23 at 17:00, but I forgot to add it to status page, and when I tried to add it today, it added it as today's
Mentioned problem is actual and for Maintenance.
Thank you in advance.
No response
Dear @herrtxbias
For my test I have 3 subscribers with same notification options.
When I create a maintenance/incident, only 2 of 3 subscribers are receiving the emails.
Here is the log for the subscriber that is not receiving email :
Mar 30 07:32:54 XXXXX postfix/smtp[97636]: B911385C63: to=[email protected], relay=gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1b]:25, delay=0.65, delays=0.01/0.02/0.43/0.19, dsn=5.7.1, status=bounced (host gmail-smtp-in.l.google.com[2a00:1450:400c:c07::1b] said: 550-5.7.1 [2001:41d0:302:1000::21a9] Messages missing a valid messageId header 550 5.7.1 are not accepted. n15-20020a5d4c4f000000b002d4a890394asi25563373wrt.324 - gsmtp (in reply to end of DATA command))
No failed task in the admin.
Any ideas ?
...
...
2.0.0 (Preview)
...
No response
When no incidents happen there is a quiet long "empty" list with only dates.
It would be nice to have an option to hide the past days with no incidents.
No idea yet
No response
It will be much helpful when we mention the time zone of the issue happening. So it will be more clear to the readers to understand the time of the issue occurrence.
My suggestion will be either we need to have the option to show the time zone there in the status page.
In the dashboard, we can choose/select the timezone.
or we need option to either show the timing as UTC or IST etc..
The option to show the timezone of the issue occurrence.
No response
The first login requires a otp pin but it is not possible to add a device without login
Manage.py command should be available to setup otp or disable otp
2.0.0 (Preview)
Desktop (please complete the following information):
No response
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.