Skip to content

Commit b369f3f

Browse files
committed
feat: implement observability
1 parent f7d7db4 commit b369f3f

5 files changed

Lines changed: 100 additions & 4 deletions

File tree

.env.example

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ PHOENIX_EVENTS_ENABLED=false
110110
PHOENIX_EVENTS_URL=http://localhost:4000
111111
INTERNAL_JWT_SECRET=
112112

113+
# ===========================================
114+
# Sidekiq Web UI (production access)
115+
# ===========================================
116+
# Password for /sidekiq dashboard. Protected by HTTP Basic Auth (user: prostaff).
117+
# Leave blank to keep the UI inaccessible (safe default).
118+
# Set a strong random value in production (e.g. openssl rand -hex 32).
119+
SIDEKIQ_WEB_PASSWORD=
120+
113121
# ===========================================
114122
# HashID Configuration (for public URL obfuscation)
115123
# ===========================================

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- `POST /api/v1/support/uploads` — authenticated file upload endpoint
2+
- Supabase S3-compatible storage via `aws-sdk-s3`

config/routes.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -500,9 +500,12 @@
500500
end
501501
end
502502

503-
# Mount Sidekiq web UI in development
504-
if Rails.env.development?
505-
require 'sidekiq/web'
506-
mount Sidekiq::Web => '/sidekiq'
503+
require 'sidekiq/web'
504+
Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|
505+
user == 'prostaff' && ActiveSupport::SecurityUtils.secure_compare(
506+
::Digest::SHA256.hexdigest(password),
507+
::Digest::SHA256.hexdigest(ENV.fetch('SIDEKIQ_WEB_PASSWORD', ''))
508+
)
507509
end
510+
mount Sidekiq::Web => '/sidekiq'
508511
end

infra/filebeat/docker-compose.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
services:
2+
filebeat:
3+
image: docker.elastic.co/beats/filebeat:8.19.0
4+
user: root
5+
restart: unless-stopped
6+
volumes:
7+
- /var/lib/docker/containers:/var/lib/docker/containers:ro
8+
- /var/run/docker.sock:/var/run/docker.sock:ro
9+
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
10+
networks:
11+
- vcgokoow00g0ggs0wwg4so4o
12+
- coolify
13+
mem_limit: 100m
14+
labels:
15+
- coolify.managed=true
16+
17+
networks:
18+
vcgokoow00g0ggs0wwg4so4o:
19+
external: true
20+
coolify:
21+
external: true

infra/filebeat/filebeat.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
filebeat.autodiscover:
2+
providers:
3+
- type: docker
4+
hints.enabled: true
5+
templates:
6+
- condition:
7+
contains:
8+
docker.container.name: "api"
9+
config:
10+
- type: container
11+
paths:
12+
- /var/lib/docker/containers/${data.docker.container.id}/*.log
13+
json.keys_under_root: false
14+
fields:
15+
service: api
16+
- condition:
17+
contains:
18+
docker.container.name: "sidekiq"
19+
config:
20+
- type: container
21+
paths:
22+
- /var/lib/docker/containers/${data.docker.container.id}/*.log
23+
fields:
24+
service: sidekiq
25+
- condition:
26+
contains:
27+
docker.container.name: "events"
28+
config:
29+
- type: container
30+
paths:
31+
- /var/lib/docker/containers/${data.docker.container.id}/*.log
32+
fields:
33+
service: events
34+
- condition:
35+
contains:
36+
docker.container.name: "scraper"
37+
config:
38+
- type: container
39+
paths:
40+
- /var/lib/docker/containers/${data.docker.container.id}/*.log
41+
fields:
42+
service: scraper
43+
- condition:
44+
contains:
45+
docker.container.name: "enrichment"
46+
config:
47+
- type: container
48+
paths:
49+
- /var/lib/docker/containers/${data.docker.container.id}/*.log
50+
fields:
51+
service: enrichment
52+
53+
output.elasticsearch:
54+
hosts: ["http://elasticsearch-vcgokoow00g0ggs0wwg4so4o:9200"]
55+
index: "prostaff-logs-%{+yyyy.MM.dd}"
56+
57+
setup.kibana:
58+
host: "http://kibana-fccsw00gc0oo4g0gwk0kcw4w:5601"
59+
60+
setup.ilm.enabled: false
61+
setup.template.name: "prostaff-logs"
62+
setup.template.pattern: "prostaff-logs-*"

0 commit comments

Comments
 (0)