varanus 0.1.0.dev5__tar.gz → 0.1.0.dev6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/PKG-INFO +1 -1
  2. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/pyproject.toml +1 -1
  3. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/events.py +4 -2
  4. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/management/commands/serve.py +2 -2
  5. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/settings.py +2 -1
  6. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/views/api.py +5 -0
  7. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/runner.py +1 -1
  8. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/utils.py +7 -0
  9. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/README.md +0 -0
  10. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/__init__.py +0 -0
  11. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/__init__.py +0 -0
  12. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/apps.py +0 -0
  13. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/client.py +0 -0
  14. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/context.py +0 -0
  15. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/loggers.py +0 -0
  16. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/middleware.py +0 -0
  17. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/transport/__init__.py +0 -0
  18. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/transport/base.py +0 -0
  19. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/transport/database.py +0 -0
  20. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/client/transport/http.py +0 -0
  21. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/__init__.py +0 -0
  22. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/base.py +0 -0
  23. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/fields.py +0 -0
  24. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/templates/search/daterange.html +0 -0
  25. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/templates/search/filter.html +0 -0
  26. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/templates/search/hidden.html +0 -0
  27. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/templates/search/multifacet.html +0 -0
  28. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/templates/search/search.html +0 -0
  29. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/search/utils.py +0 -0
  30. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/__init__.py +0 -0
  31. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/__main__.py +0 -0
  32. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/admin.py +0 -0
  33. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/apps.py +0 -0
  34. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/asgi.py +0 -0
  35. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/context_processors.py +0 -0
  36. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/integrations/__init__.py +0 -0
  37. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/integrations/base.py +0 -0
  38. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/integrations/squish.py +0 -0
  39. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/management/__init__.py +0 -0
  40. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/management/commands/__init__.py +0 -0
  41. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/management/commands/migrateall.py +0 -0
  42. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/middleware.py +0 -0
  43. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/migrations/0001_initial.py +0 -0
  44. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/migrations/__init__.py +0 -0
  45. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/models.py +0 -0
  46. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/router.py +0 -0
  47. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/static/css/varanus.css +0 -0
  48. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/static/js/varanus.js +0 -0
  49. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/tasks.py +0 -0
  50. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/base.html +0 -0
  51. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/dashboard.html +0 -0
  52. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/registration/login.html +0 -0
  53. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/base.html +0 -0
  54. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/environment_nodes.html +0 -0
  55. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/error.html +0 -0
  56. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/log.html +0 -0
  57. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/metric.html +0 -0
  58. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/node_env.html +0 -0
  59. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/node_environments.html +0 -0
  60. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/node_packages.html +0 -0
  61. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/node_settings.html +0 -0
  62. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/query.html +0 -0
  63. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/details/request.html +0 -0
  64. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/errors.html +0 -0
  65. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/logs.html +0 -0
  66. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/metrics.html +0 -0
  67. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/overview.html +0 -0
  68. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/queries.html +0 -0
  69. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templates/site/requests.html +0 -0
  70. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templatetags/__init__.py +0 -0
  71. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/templatetags/varanus.py +0 -0
  72. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/urls.py +0 -0
  73. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/utils.py +0 -0
  74. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/views/__init__.py +0 -0
  75. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/views/base.py +0 -0
  76. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/views/dashboard.py +0 -0
  77. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/views/site.py +0 -0
  78. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/server/wsgi.py +0 -0
  79. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/__init__.py +0 -0
  80. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/admin.py +0 -0
  81. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/apps.py +0 -0
  82. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/backend.py +0 -0
  83. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/management/__init__.py +0 -0
  84. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/management/commands/__init__.py +0 -0
  85. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/management/commands/tasker.py +0 -0
  86. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/migrations/0001_initial.py +0 -0
  87. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/migrations/__init__.py +0 -0
  88. {varanus-0.1.0.dev5 → varanus-0.1.0.dev6}/src/varanus/tasks/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: varanus
3
- Version: 0.1.0.dev5
3
+ Version: 0.1.0.dev6
4
4
  Summary: Django application monitoring.
5
5
  Requires-Dist: httpx>=0.27.0
6
6
  Requires-Dist: msgspec>=0.19.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "varanus"
3
- version = "0.1.0.dev5"
3
+ version = "0.1.0.dev6"
4
4
  description = "Django application monitoring."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -4,6 +4,8 @@ from datetime import datetime, timezone
4
4
 
5
5
  from msgspec import Struct, field
6
6
 
7
+ from .utils import safe_repr
8
+
7
9
 
8
10
  def now():
9
11
  return datetime.now(tz=timezone.utc)
@@ -46,7 +48,7 @@ def capture_stack(skip: int = 0, include_locals: bool = False) -> list[StackLine
46
48
  function=frame.function,
47
49
  module=frame.frame.f_globals.get("__name__", ""),
48
50
  locals=(
49
- {name: repr(val) for name, val in frame.frame.f_locals.items()}
51
+ {name: safe_repr(val) for name, val in frame.frame.f_locals.items()}
50
52
  if include_locals
51
53
  else {}
52
54
  ),
@@ -94,7 +96,7 @@ class Error(Event):
94
96
  function=function,
95
97
  module=module,
96
98
  linesrc=linesrc,
97
- locals={name: repr(val) for name, val in f_locals.items()},
99
+ locals={name: safe_repr(val) for name, val in f_locals.items()},
98
100
  )
99
101
  )
100
102
  tb = tb.tb_next
@@ -47,8 +47,8 @@ class Command(BaseCommand):
47
47
  self.runner = Runner(workers=workers)
48
48
 
49
49
  server = Granian(
50
- "varanus.server.wsgi:application",
51
- address="127.0.0.1",
50
+ ":".join(settings.WSGI_APPLICATION.rsplit(".", 1)),
51
+ address="0.0.0.0",
52
52
  port=9000,
53
53
  interface=Interfaces.WSGI,
54
54
  workers=options["workers"],
@@ -97,10 +97,11 @@ TEMPLATES = [
97
97
 
98
98
  WSGI_APPLICATION = "varanus.server.wsgi.application"
99
99
 
100
+ # https://forum.djangoproject.com/t/sqlite-and-database-is-locked-error/26994
100
101
  DATABASES = {
101
102
  "default": config(
102
103
  "DATABASE_URL",
103
- f"sqlite:///{DATA_DIR}/db.sqlite3",
104
+ f"sqlite:///{DATA_DIR}/db.sqlite3?transaction_mode=IMMEDIATE",
104
105
  cast=DatabaseDict(ATOMIC_REQUESTS=True, TEST={"MIGRATE": False}),
105
106
  ),
106
107
  }
@@ -1,3 +1,5 @@
1
+ import logging
2
+
1
3
  import msgspec
2
4
  from django.http import HttpRequest, HttpResponseBase, JsonResponse
3
5
  from django.views.decorators.csrf import csrf_exempt
@@ -8,6 +10,8 @@ from varanus import events
8
10
  from ..models import Node, Site, SiteKey
9
11
  from ..tasks import ingest
10
12
 
13
+ logger = logging.getLogger(__name__)
14
+
11
15
 
12
16
  class APIView(View):
13
17
  key: SiteKey
@@ -33,6 +37,7 @@ class APIView(View):
33
37
  except SiteKey.DoesNotExist:
34
38
  return JsonResponse({"error": "Invalid site key."}, status=401)
35
39
  except Exception as e:
40
+ logger.exception("Bad API request")
36
41
  return JsonResponse({"error": str(e)}, status=400)
37
42
 
38
43
 
@@ -42,7 +42,7 @@ class Runner:
42
42
  def get_tasks(self, number: int):
43
43
  if number <= 0:
44
44
  return []
45
- with transaction.atomic():
45
+ with transaction.atomic(durable=True):
46
46
  now = timezone.now()
47
47
  tasks = list(
48
48
  ScheduledTask.objects.filter(
@@ -19,3 +19,10 @@ def make_fingerprint(parts: Iterable) -> str:
19
19
  return hashlib.sha256(
20
20
  ":".join(str(p).strip().lower() for p in parts if p).encode("utf-8")
21
21
  ).hexdigest()
22
+
23
+
24
+ def safe_repr(obj, max_length: int = 1024) -> str:
25
+ r = repr(obj)
26
+ if len(r) > max_length:
27
+ r = r[: max_length - 1] + "…"
28
+ return r
File without changes