[GH-ISSUE #1057] [Django] ERROR (EXTERNAL IP): Internal Server Error... #734

Closed
opened 2026-02-25 23:43:24 +03:00 by kerem · 6 comments
Owner

Originally created by @kelvtech-co-uk on GitHub (Sep 5, 2024).
Original GitHub issue: https://github.com/healthchecks/healthchecks/issues/1057

Just stated to recevie these email alerts sporadically. No change event and the pings to all my endpoints are showing as working. I've updated the docker image and rebuilt the container but am still getting them. Would appreicate some tshoot pointers?

Thx

[Django] ERROR (EXTERNAL IP): Internal Server Error: /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086
Inbox

myemail@gmail.com
14:06 (1 hour ago)
to me

Internal Server Error: /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086

OperationalError at /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086
database is locked

Request Method: GET
Request URL: http://healthchecks.mydomain.local:myport/ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086
Django Version: 5.1.1
Python Executable: /usr/local/bin/uwsgi
Python Version: 3.12.5
Python Path: ['.', '', '/usr/local/lib/python312.zip', '/usr/local/lib/python3.12', '/usr/local/lib/python3.12/lib-dynload', '/usr/local/lib/python3.12/site-packages']
Server time: Thu, 05 Sep 2024 13:06:45 +0000
Installed Applications:
('hc.accounts',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.humanize',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'compressor',
 'hc.api',
 'hc.front',
 'hc.logs',
 'hc.payments')
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'whitenoise.middleware.WhiteNoiseMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'hc.accounts.middleware.CustomHeaderMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'hc.accounts.middleware.TeamAccessMiddleware',
 'django.middleware.gzip.GZipMiddleware']


Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 105, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/sqlite3/base.py", line 354, in execute
    return super().execute(query, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The above exception (database is locked) was the direct cause of the following exception:
  File "/usr/local/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/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.12/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
    return view_func(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/views/decorators/cache.py", line 80, in _view_wrapper
    response = view_func(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/healthchecks/hc/api/views.py", line 211, in ping
    check.ping(remote_addr, scheme, method, ua, body, action, rid, exitstatus)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/healthchecks/hc/api/models.py", line 487, in ping
    self.save()
    ^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 891, in save
    self.save_base(
    ^
  File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 997, in save_base
    updated = self._save_table(

  File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 1129, in _save_table
    updated = self._do_update(

  File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 1194, in _do_update
    return filtered._update(values) > 0
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/models/query.py", line 1278, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/models/sql/compiler.py", line 2003, in execute_sql
    cursor = super().execute_sql(result_type)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/models/sql/compiler.py", line 1574, in execute_sql
    cursor.execute(sql, params)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 79, in execute
    return self._execute_with_wrappers(

  File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 100, in _execute
    with self.db.wrap_database_errors:
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 105, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/sqlite3/base.py", line 354, in execute
    return super().execute(query, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Exception Type: OperationalError at /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086
Exception Value: database is locked
Raised during: hc.api.views.ping
Request information:
USER: AnonymousUser

GET: No GET data

POST: No POST data

FILES: No FILES data

COOKIES: No cookie data

META:
HTTP_ACCEPT = '*/*'
HTTP_HOST = 'healthchecks.mydomain.local:myport'
HTTP_USER_AGENT = 'curl/7.76.1'
PATH_INFO = '/ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086'
QUERY_STRING = ''
REMOTE_ADDR = '172.17.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086'
SCRIPT_NAME = ''
SERVER_NAME = 'healthchecks'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.node = b'healthchecks'
uwsgi.version = b'2.0.26'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x1477ec3aab70>
wsgi.multiprocess = True
wsgi.multithread = False
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'

Settings:
Using settings module hc.settings
ABSOLUTE_URL_OVERRIDES = {}
ADMINS = [('myemail@gmail.com', 'myemail@gmail.com')]
ALLOWED_HOSTS = ['.mydomain.local', '.mydomain.co.uk']
APPEND_SLASH = True
APPRISE_ENABLED = False
AUTHENTICATION_BACKENDS = ['hc.accounts.backends.EmailBackend', 'hc.accounts.backends.ProfileBackend']
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/healthchecks')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'content'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssRelativeFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x1477ee1cf2e0>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_MANIFEST_STORAGE_ALIAS = 'compressor-offine'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = '()'
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/healthchecks/static-collected'
COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage'
COMPRESS_STORAGE_ALIAS = 'compressor'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = 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
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/data/hc.sqlite', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'USER': '', 'PASSWORD': '********************', 'HOST': '', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATA_UPLOAD_MAX_NUMBER_FILES = 100
DATETIME_FORMAT = 'N j, Y, P'
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.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'hc.debug.ExceptionReporterFilter'
DEFAULT_FROM_EMAIL = 'healthchecks@myhostname.local'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
DISCORD_CLIENT_ID = None
DISCORD_CLIENT_SECRET = '********************'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = 'myemail@gmail.com'
EMAIL_MAIL_FROM_TMPL = ''
EMAIL_PORT = 587
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = True
EMAIL_USE_VERIFICATION = True
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
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORMS_URLFIELD_ASSUME_HTTPS = False
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hc.accounts', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.humanize', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'compressor', 'hc.api', 'hc.front', 'hc.logs', 'hc.payments')"
INTEGRATIONS_ALLOW_PRIVATE_IPS = False
INTERNAL_IPS = []
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'), ('ckb', 'Central Kurdish (Sorani)'), ('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'), ('ug', 'Uyghur'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', '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
LINENOTIFY_CLIENT_ID = None
LINENOTIFY_CLIENT_SECRET = '********************'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'handlers': {'db': {'level': 'DEBUG', 'class': 'hc.logs.Handler'}}, 'loggers': {'django.request': {'level': 'ERROR', 'handlers': ['db']}, 'hc': {'level': 'DEBUG', 'handlers': ['db']}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/accounts/profile/'
LOGIN_URL = '/accounts/login/'
LOGOUT_REDIRECT_URL = None
MANAGERS = []
MASTER_BADGE_LABEL = 'myname_healthchecks'
MATRIX_ACCESS_TOKEN = '********************'
MATRIX_HOMESERVER = None
MATRIX_USER_ID = None
MATTERMOST_ENABLED = True
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
METRICS_KEY = '********************'
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'hc.accounts.middleware.CustomHeaderMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'hc.accounts.middleware.TeamAccessMiddleware', 'django.middleware.gzip.GZipMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
MSTEAMS_ENABLED = True
NUMBER_GROUPING = 0
OPSGENIE_ENABLED = True
PAGERTREE_ENABLED = True
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PD_APP_ID = None
PD_ENABLED = True
PING_BODY_LIMIT = 10000
PING_EMAIL_DOMAIN = 'localhost'
PING_ENDPOINT = 'http://healthchecks.mydomain.local:myport/ping/'
PREPEND_WWW = False
PROMETHEUS_ENABLED = True
PUSHBULLET_CLIENT_ID = None
PUSHBULLET_CLIENT_SECRET = '********************'
PUSHOVER_API_TOKEN = '********************'
PUSHOVER_EMERGENCY_EXPIRATION = 86400
PUSHOVER_EMERGENCY_RETRY_DELAY = 300
PUSHOVER_SUBSCRIPTION_URL = None
REGISTRATION_OPEN = True
REMOTE_USER_HEADER = None
ROCKETCHAT_ENABLED = True
ROOT_URLCONF = 'hc.urls'
RP_ID = None
S3_ACCESS_KEY = '********************'
S3_BUCKET = None
S3_ENDPOINT = None
S3_REGION = None
S3_SECRET_KEY = '********************'
S3_SECURE = True
S3_TIMEOUT = 60
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 = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root@localhost'
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 = 'hc.settings'
SHELL_ENABLED = False
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNAL_CLI_SOCKET = None
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_LOGO_URL = None
SITE_NAME = 'myname_healthchecks'
SITE_ROOT = 'http://healthchecks.mydomain.local:myport'
SLACK_CLIENT_ID = None
SLACK_CLIENT_SECRET = '********************'
SLACK_ENABLED = True
SPIKE_ENABLED = True
STATICFILES_DIRS = [PosixPath('/opt/healthchecks/static')]
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATIC_ROOT = PosixPath('/opt/healthchecks/static-collected')
STATIC_URL = '/static/'
STATSD_HOST = None
STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
SUPPORT_EMAIL = None
TELEGRAM_BOT_NAME = 'ExampleBot'
TELEGRAM_TOKEN = '********************'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [PosixPath('/opt/healthchecks/templates')], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'hc.front.context_processors.branding', 'hc.payments.context_processors.payments']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'hc.api.tests.CustomRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
TRELLO_APP_KEY = '********************'
TWILIO_ACCOUNT = None
TWILIO_AUTH = '********************'
TWILIO_FROM = None
TWILIO_MESSAGING_SERVICE_SID = None
TWILIO_USE_WHATSAPP = False
USE_I18N = False
USE_PAYMENTS = False
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
VERSION = 'v3.6'
VICTOROPS_ENABLED = True
WEBHOOKS_ENABLED = True
WHATSAPP_DOWN_CONTENT_SID = None
WHATSAPP_UP_CONTENT_SID = None
WHITENOISE_IMMUTABLE_FILE_TEST = <function immutable_file_test at 0x1477ee59f420>
WSGI_APPLICATION = 'hc.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
ZULIP_ENABLED = True
Originally created by @kelvtech-co-uk on GitHub (Sep 5, 2024). Original GitHub issue: https://github.com/healthchecks/healthchecks/issues/1057 Just stated to recevie these email alerts sporadically. No change event and the pings to all my endpoints are showing as working. I've updated the docker image and rebuilt the container but am still getting them. Would appreicate some tshoot pointers? Thx ``` [Django] ERROR (EXTERNAL IP): Internal Server Error: /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086 Inbox myemail@gmail.com 14:06 (1 hour ago) to me Internal Server Error: /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086 OperationalError at /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086 database is locked Request Method: GET Request URL: http://healthchecks.mydomain.local:myport/ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086 Django Version: 5.1.1 Python Executable: /usr/local/bin/uwsgi Python Version: 3.12.5 Python Path: ['.', '', '/usr/local/lib/python312.zip', '/usr/local/lib/python3.12', '/usr/local/lib/python3.12/lib-dynload', '/usr/local/lib/python3.12/site-packages'] Server time: Thu, 05 Sep 2024 13:06:45 +0000 Installed Applications: ('hc.accounts', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.humanize', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'compressor', 'hc.api', 'hc.front', 'hc.logs', 'hc.payments') Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'hc.accounts.middleware.CustomHeaderMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'hc.accounts.middleware.TeamAccessMiddleware', 'django.middleware.gzip.GZipMiddleware'] Traceback (most recent call last): File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 105, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/backends/sqlite3/base.py", line 354, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The above exception (database is locked) was the direct cause of the following exception: File "/usr/local/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/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.12/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/views/decorators/cache.py", line 80, in _view_wrapper response = view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/healthchecks/hc/api/views.py", line 211, in ping check.ping(remote_addr, scheme, method, ua, body, action, rid, exitstatus) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/healthchecks/hc/api/models.py", line 487, in ping self.save() ^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 891, in save self.save_base( ^ File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 997, in save_base updated = self._save_table( File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 1129, in _save_table updated = self._do_update( File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 1194, in _do_update return filtered._update(values) > 0 ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/models/query.py", line 1278, in _update return query.get_compiler(self.db).execute_sql(CURSOR) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/models/sql/compiler.py", line 2003, in execute_sql cursor = super().execute_sql(result_type) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/models/sql/compiler.py", line 1574, in execute_sql cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 79, in execute return self._execute_with_wrappers( File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers return executor(sql, params, many, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 100, in _execute with self.db.wrap_database_errors: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/utils.py", line 91, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/backends/utils.py", line 105, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/django/db/backends/sqlite3/base.py", line 354, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Exception Type: OperationalError at /ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086 Exception Value: database is locked Raised during: hc.api.views.ping Request information: USER: AnonymousUser GET: No GET data POST: No POST data FILES: No FILES data COOKIES: No cookie data META: HTTP_ACCEPT = '*/*' HTTP_HOST = 'healthchecks.mydomain.local:myport' HTTP_USER_AGENT = 'curl/7.76.1' PATH_INFO = '/ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086' QUERY_STRING = '' REMOTE_ADDR = '172.17.0.1' REQUEST_METHOD = 'GET' REQUEST_URI = '/ping/85e2c6dc-2cdd-4c5a-b48c-40f65e829086' SCRIPT_NAME = '' SERVER_NAME = 'healthchecks' SERVER_PORT = '8000' SERVER_PROTOCOL = 'HTTP/1.1' uwsgi.node = b'healthchecks' uwsgi.version = b'2.0.26' wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'> wsgi.file_wrapper = <built-in function uwsgi_sendfile> wsgi.input = <uwsgi._Input object at 0x1477ec3aab70> wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'http' wsgi.version = '(1, 0)' Settings: Using settings module hc.settings ABSOLUTE_URL_OVERRIDES = {} ADMINS = [('myemail@gmail.com', 'myemail@gmail.com')] ALLOWED_HOSTS = ['.mydomain.local', '.mydomain.co.uk'] APPEND_SLASH = True APPRISE_ENABLED = False AUTHENTICATION_BACKENDS = ['hc.accounts.backends.EmailBackend', 'hc.accounts.backends.ProfileBackend'] AUTH_PASSWORD_VALIDATORS = '********************' AUTH_USER_MODEL = 'auth.User' BASE_DIR = PosixPath('/opt/healthchecks') CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_KEY_PREFIX = '********************' CACHE_MIDDLEWARE_SECONDS = 600 COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()' COMPRESS_CACHE_BACKEND = 'default' COMPRESS_CACHE_KEY_FUNCTION = '********************' COMPRESS_CLEAN_CSS_ARGUMENTS = '' COMPRESS_CLEAN_CSS_BINARY = 'cleancss' COMPRESS_CLOSURE_COMPILER_ARGUMENTS = '' COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar' COMPRESS_CSS_HASHING_METHOD = 'content' COMPRESS_DATA_URI_MAX_SIZE = 1024 COMPRESS_DEBUG_TOGGLE = None COMPRESS_ENABLED = True COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssRelativeFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']} COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x1477ee1cf2e0> COMPRESS_MINT_DELAY = 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json' COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage' COMPRESS_OFFLINE_MANIFEST_STORAGE_ALIAS = 'compressor-offine' COMPRESS_OFFLINE_TIMEOUT = 31536000 COMPRESS_OUTPUT_DIR = 'CACHE' COMPRESS_PARSER = 'compressor.parser.AutoSelectParser' COMPRESS_PRECOMPILERS = '()' COMPRESS_REBUILD_TIMEOUT = 2592000 COMPRESS_ROOT = '/opt/healthchecks/static-collected' COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage' COMPRESS_STORAGE_ALIAS = 'compressor' COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL = '/static/' COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/' COMPRESS_VERBOSE = False COMPRESS_YUGLIFY_BINARY = 'yuglify' COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal' COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal' COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar' COMPRESS_YUI_CSS_ARGUMENTS = '' COMPRESS_YUI_JS_ARGUMENTS = '' CSRF_COOKIE_AGE = 31449600 CSRF_COOKIE_DOMAIN = None CSRF_COOKIE_HTTPONLY = 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 DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/data/hc.sqlite', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'USER': '', 'PASSWORD': '********************', 'HOST': '', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATA_UPLOAD_MAX_NUMBER_FILES = 100 DATETIME_FORMAT = 'N j, Y, P' 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.AutoField' DEFAULT_CHARSET = 'utf-8' DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter' DEFAULT_EXCEPTION_REPORTER_FILTER = 'hc.debug.ExceptionReporterFilter' DEFAULT_FROM_EMAIL = 'healthchecks@myhostname.local' DEFAULT_INDEX_TABLESPACE = '' DEFAULT_TABLESPACE = '' DISALLOWED_USER_AGENTS = [] DISCORD_CLIENT_ID = None DISCORD_CLIENT_SECRET = '********************' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_PASSWORD = '********************' EMAIL_HOST_USER = 'myemail@gmail.com' EMAIL_MAIL_FROM_TMPL = '' EMAIL_PORT = 587 EMAIL_SSL_CERTFILE = None EMAIL_SSL_KEYFILE = '********************' EMAIL_SUBJECT_PREFIX = '[Django] ' EMAIL_TIMEOUT = None EMAIL_USE_LOCALTIME = False EMAIL_USE_SSL = False EMAIL_USE_TLS = True EMAIL_USE_VERIFICATION = True 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 FIRST_DAY_OF_WEEK = 0 FIXTURE_DIRS = [] FORCE_SCRIPT_NAME = None FORMAT_MODULE_PATH = None FORMS_URLFIELD_ASSUME_HTTPS = False FORM_RENDERER = 'django.forms.renderers.DjangoTemplates' IGNORABLE_404_URLS = [] INSTALLED_APPS = "('hc.accounts', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.humanize', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'compressor', 'hc.api', 'hc.front', 'hc.logs', 'hc.payments')" INTEGRATIONS_ALLOW_PRIVATE_IPS = False INTERNAL_IPS = [] 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'), ('ckb', 'Central Kurdish (Sorani)'), ('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'), ('ug', 'Uyghur'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', '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 LINENOTIFY_CLIENT_ID = None LINENOTIFY_CLIENT_SECRET = '********************' LOCALE_PATHS = [] LOGGING = {'version': 1, 'disable_existing_loggers': False, 'handlers': {'db': {'level': 'DEBUG', 'class': 'hc.logs.Handler'}}, 'loggers': {'django.request': {'level': 'ERROR', 'handlers': ['db']}, 'hc': {'level': 'DEBUG', 'handlers': ['db']}}} LOGGING_CONFIG = 'logging.config.dictConfig' LOGIN_REDIRECT_URL = '/accounts/profile/' LOGIN_URL = '/accounts/login/' LOGOUT_REDIRECT_URL = None MANAGERS = [] MASTER_BADGE_LABEL = 'myname_healthchecks' MATRIX_ACCESS_TOKEN = '********************' MATRIX_HOMESERVER = None MATRIX_USER_ID = None MATTERMOST_ENABLED = True MEDIA_ROOT = '' MEDIA_URL = '/' MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage' METRICS_KEY = '********************' MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'hc.accounts.middleware.CustomHeaderMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'hc.accounts.middleware.TeamAccessMiddleware', 'django.middleware.gzip.GZipMiddleware'] MIGRATION_MODULES = {} MONTH_DAY_FORMAT = 'F j' MSTEAMS_ENABLED = True NUMBER_GROUPING = 0 OPSGENIE_ENABLED = True PAGERTREE_ENABLED = True PASSWORD_HASHERS = '********************' PASSWORD_RESET_TIMEOUT = '********************' PD_APP_ID = None PD_ENABLED = True PING_BODY_LIMIT = 10000 PING_EMAIL_DOMAIN = 'localhost' PING_ENDPOINT = 'http://healthchecks.mydomain.local:myport/ping/' PREPEND_WWW = False PROMETHEUS_ENABLED = True PUSHBULLET_CLIENT_ID = None PUSHBULLET_CLIENT_SECRET = '********************' PUSHOVER_API_TOKEN = '********************' PUSHOVER_EMERGENCY_EXPIRATION = 86400 PUSHOVER_EMERGENCY_RETRY_DELAY = 300 PUSHOVER_SUBSCRIPTION_URL = None REGISTRATION_OPEN = True REMOTE_USER_HEADER = None ROCKETCHAT_ENABLED = True ROOT_URLCONF = 'hc.urls' RP_ID = None S3_ACCESS_KEY = '********************' S3_BUCKET = None S3_ENDPOINT = None S3_REGION = None S3_SECRET_KEY = '********************' S3_SECURE = True S3_TIMEOUT = 60 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 = None SECURE_REDIRECT_EXEMPT = [] SECURE_REFERRER_POLICY = 'same-origin' SECURE_SSL_HOST = None SECURE_SSL_REDIRECT = False SERVER_EMAIL = 'root@localhost' 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 = 'hc.settings' SHELL_ENABLED = False SHORT_DATETIME_FORMAT = 'm/d/Y P' SHORT_DATE_FORMAT = 'm/d/Y' SIGNAL_CLI_SOCKET = None SIGNING_BACKEND = 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS = [] SITE_LOGO_URL = None SITE_NAME = 'myname_healthchecks' SITE_ROOT = 'http://healthchecks.mydomain.local:myport' SLACK_CLIENT_ID = None SLACK_CLIENT_SECRET = '********************' SLACK_ENABLED = True SPIKE_ENABLED = True STATICFILES_DIRS = [PosixPath('/opt/healthchecks/static')] STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')" STATIC_ROOT = PosixPath('/opt/healthchecks/static-collected') STATIC_URL = '/static/' STATSD_HOST = None STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}} SUPPORT_EMAIL = None TELEGRAM_BOT_NAME = 'ExampleBot' TELEGRAM_TOKEN = '********************' TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [PosixPath('/opt/healthchecks/templates')], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'hc.front.context_processors.branding', 'hc.payments.context_processors.payments']}}] TEST_NON_SERIALIZED_APPS = [] TEST_RUNNER = 'hc.api.tests.CustomRunner' THOUSAND_SEPARATOR = ',' TIME_FORMAT = 'P' TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'UTC' TRELLO_APP_KEY = '********************' TWILIO_ACCOUNT = None TWILIO_AUTH = '********************' TWILIO_FROM = None TWILIO_MESSAGING_SERVICE_SID = None TWILIO_USE_WHATSAPP = False USE_I18N = False USE_PAYMENTS = False USE_THOUSAND_SEPARATOR = False USE_TZ = True USE_X_FORWARDED_HOST = False USE_X_FORWARDED_PORT = False VERSION = 'v3.6' VICTOROPS_ENABLED = True WEBHOOKS_ENABLED = True WHATSAPP_DOWN_CONTENT_SID = None WHATSAPP_UP_CONTENT_SID = None WHITENOISE_IMMUTABLE_FILE_TEST = <function immutable_file_test at 0x1477ee59f420> WSGI_APPLICATION = 'hc.wsgi.application' X_FRAME_OPTIONS = 'DENY' YEAR_MONTH_FORMAT = 'F Y' ZULIP_ENABLED = True ```
kerem closed this issue 2026-02-25 23:43:24 +03:00
Author
Owner

@theprantadutta commented on GitHub (Sep 7, 2024):

@kelvtech-co-uk Did you find any solution, I tried adding
ALLOWED_HOSTS=['hc.example.net', '203.xx.xxx.xxx]
or
'hc.example.net,203.xx.xxx.xxx'
none of this seems to work

<!-- gh-comment-id:2335028132 --> @theprantadutta commented on GitHub (Sep 7, 2024): @kelvtech-co-uk Did you find any solution, I tried adding ALLOWED_HOSTS=['hc.example.net', '203.xx.xxx.xxx] or 'hc.example.net,203.xx.xxx.xxx' none of this seems to work
Author
Owner

@kelvtech-co-uk commented on GitHub (Sep 7, 2024):

No, its still happening but it's not frequent and the web UI shows my pings are being received. The error message at the top of the text I posted says its a DB lock issue which is the oddity for me as this is all controlled by HC itself.

<!-- gh-comment-id:2335105019 --> @kelvtech-co-uk commented on GitHub (Sep 7, 2024): No, its still happening but it's not frequent and the web UI shows my pings are being received. The error message at the top of the text I posted says its a DB lock issue which is the oddity for me as this is all controlled by HC itself.
Author
Owner

@aslirajesh commented on GitHub (Sep 8, 2024):

This is common issue with sqlite3, try using postgres or mysql.
see here

<!-- gh-comment-id:2336747007 --> @aslirajesh commented on GitHub (Sep 8, 2024): This is common issue with sqlite3, try using postgres or mysql. see [here](https://github.com/healthchecks/healthchecks/blob/master/hc/settings.py#L150)
Author
Owner

@kelvtech-co-uk commented on GitHub (Sep 8, 2024):

Thanks, just completed a migration to mysql.

Sharing this link with migration instructions which worked well for me.

<!-- gh-comment-id:2336779163 --> @kelvtech-co-uk commented on GitHub (Sep 8, 2024): Thanks, just completed a migration to mysql. Sharing [this](https://github.com/healthchecks/healthchecks/discussions/558#discussioncomment-1352148) link with migration instructions which worked well for me.
Author
Owner

@cuu508 commented on GitHub (Sep 9, 2024):

I could reproduce the "database is locked" error. I sent concurrent ping HTTP requests using the ab tool, and saw the "database is locked" errors even with concurrency of 2.

Just pushed a commit which adds a couple sqlite configuration parameters:

  • PRAGMA busy_timeout configures the database to wait when a database is locked instead of giving up immediately.
  • transaction_mode IMMEDIATE starts transactions in read/write mode, required to make busy_timeout work.

With these in place, in my testing, I did not see "database is locked" errors any more.

<!-- gh-comment-id:2337319005 --> @cuu508 commented on GitHub (Sep 9, 2024): I could reproduce the "database is locked" error. I sent concurrent ping HTTP requests using the `ab` tool, and saw the "database is locked" errors even with concurrency of 2. Just pushed a commit which adds a couple sqlite configuration parameters: * `PRAGMA busy_timeout` configures the database to wait when a database is locked instead of giving up immediately. * `transaction_mode IMMEDIATE` starts transactions in read/write mode, required to make busy_timeout work. With these in place, in my testing, I did not see "database is locked" errors any more.
Author
Owner

@cuu508 commented on GitHub (Oct 21, 2024):

I've released v3.7 which includes a fix for this issue.

<!-- gh-comment-id:2426539563 --> @cuu508 commented on GitHub (Oct 21, 2024): I've released v3.7 which includes a fix for this issue.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/healthchecks#734
No description provided.