Skip to content

Commit e0d706c

Browse files
committed
Add data dog and mysql-gcloud primary-replica db support
1 parent 21d3b53 commit e0d706c

File tree

13 files changed

+640
-22
lines changed

13 files changed

+640
-22
lines changed

.env.example

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
1-
# Database configuration
2-
DATABASE_URL=mysql://realtime_server:password@localhost/realtime_server_dev
1+
# Primary Database (Google Cloud SQL)
2+
PRIMARY_DB_USERNAME=your_primary_username
3+
PRIMARY_DB_PASSWORD=your_primary_password
4+
PRIMARY_DB_NAME=your_database_name
5+
PRIMARY_DB_HOST=your_primary_instance.region.cloudsql.com
6+
PRIMARY_DB_PORT=3306
7+
8+
# Read Replica 1
9+
REPLICA_1_DB_USERNAME=your_replica1_username
10+
REPLICA_1_DB_PASSWORD=your_replica1_password
11+
REPLICA_1_DB_NAME=your_database_name
12+
REPLICA_1_DB_HOST=your_replica1_instance.region.cloudsql.com
13+
REPLICA_1_DB_PORT=3306
14+
15+
# Read Replica 2
16+
REPLICA_2_DB_USERNAME=your_replica2_username
17+
REPLICA_2_DB_PASSWORD=your_replica2_password
18+
REPLICA_2_DB_NAME=your_database_name
19+
REPLICA_2_DB_HOST=your_replica2_instance.region.cloudsql.com
20+
REPLICA_2_DB_PORT=3306
21+
22+
# SSL Configuration
23+
DB_CA_CERT=/path/to/server-ca.pem
24+
25+
# Connection Pool Configuration
26+
POOL_SIZE=10
327

428
# Phoenix configuration
529
SECRET_KEY_BASE=your-secret-key-base
@@ -14,4 +38,15 @@ GUARDIAN_SECRET_KEY=your-guardian-secret
1438

1539
# Application configuration
1640
PHX_HOST=localhost
17-
PORT=4000
41+
PORT=4000
42+
43+
# Monitoring Configuration
44+
ENABLE_DATADOG=false
45+
DATADOG_API_KEY=your-datadog-api-key
46+
DATADOG_APP_KEY=your-datadog-app-key
47+
48+
# Prometheus Configuration
49+
PROMETHEUS_PORT=9568
50+
51+
# Log Level
52+
LOG_LEVEL=info

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ A production-ready Elixir server implementation providing real-time features thr
2929
- Test coverage
3030
- Monitoring setup
3131

32+
📊 **Comprehensive Monitoring**
33+
34+
- Multi-backend logging system
35+
- Metrics collection
36+
- Telemetry integration
37+
- Pluggable monitoring solutions
38+
3239
## Quick Start
3340

3441
### Prerequisites
@@ -85,6 +92,7 @@ Detailed documentation is available in the [docs](./docs) directory:
8592
- [Architecture Overview](docs/architecture.md)
8693
- [Real-time Features](docs/realtime.md)
8794
- [Firebase Integration](docs/firebase_integration.md)
95+
- [Observability Guide](docs/observability.md)
8896
- [API Reference](docs/api/README.md)
8997
- [Deployment Guide](docs/deployment.md)
9098

config/config.exs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,20 @@ config :realtime_server, RealtimeServer.Repo,
1313
database: "realtime_server",
1414
username: System.get_env("DATABASE_USERNAME"),
1515
password: System.get_env("DATABASE_PASSWORD"),
16-
hostname: System.get_env("DATABASE_HOST")
16+
hostname: System.get_env("DATABASE_HOST")
17+
18+
config :realtime_server,
19+
logger_backends: [
20+
RealtimeServer.Observability.Loggers.Console
21+
],
22+
metrics_backends: [
23+
RealtimeServer.Observability.Metrics.Prometheus
24+
]
25+
26+
# Telemetry configuration
27+
config :telemetry_metrics,
28+
reporter_options: [
29+
host: "localhost",
30+
port: 9568,
31+
protocol: :http
32+
]

config/runtime.exs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
config :realtime_server, RealtimeServer.Repo,
2+
# Primary database configuration
3+
username: System.get_env("PRIMARY_DB_USERNAME"),
4+
password: System.get_env("PRIMARY_DB_PASSWORD"),
5+
database: System.get_env("PRIMARY_DB_NAME"),
6+
hostname: System.get_env("PRIMARY_DB_HOST"),
7+
port: String.to_integer(System.get_env("PRIMARY_DB_PORT", "3306")),
8+
pool_size: String.to_integer(System.get_env("POOL_SIZE", "10")),
9+
ssl: true,
10+
ssl_opts: [
11+
verify: :verify_peer,
12+
cacertfile: System.get_env("DB_CA_CERT"),
13+
server_name_indication: to_charlist(System.get_env("PRIMARY_DB_HOST"))
14+
],
15+
# Read replica configuration
16+
replicas: [
17+
[
18+
username: System.get_env("REPLICA_1_DB_USERNAME"),
19+
password: System.get_env("REPLICA_1_DB_PASSWORD"),
20+
database: System.get_env("REPLICA_1_DB_NAME"),
21+
hostname: System.get_env("REPLICA_1_DB_HOST"),
22+
port: String.to_integer(System.get_env("REPLICA_1_DB_PORT", "3306")),
23+
ssl: true,
24+
ssl_opts: [
25+
verify: :verify_peer,
26+
cacertfile: System.get_env("DB_CA_CERT"),
27+
server_name_indication: to_charlist(System.get_env("REPLICA_1_DB_HOST"))
28+
]
29+
],
30+
[
31+
username: System.get_env("REPLICA_2_DB_USERNAME"),
32+
password: System.get_env("REPLICA_2_DB_PASSWORD"),
33+
database: System.get_env("REPLICA_2_DB_NAME"),
34+
hostname: System.get_env("REPLICA_2_DB_HOST"),
35+
port: String.to_integer(System.get_env("REPLICA_2_DB_PORT", "3306")),
36+
ssl: true,
37+
ssl_opts: [
38+
verify: :verify_peer,
39+
cacertfile: System.get_env("DB_CA_CERT"),
40+
server_name_indication: to_charlist(System.get_env("REPLICA_2_DB_HOST"))
41+
]
42+
]
43+
]

docker-compose.yml

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,23 @@ services:
66
ports:
77
- "4000:4000"
88
environment:
9-
- DATABASE_URL=mysql://realtime_server:password@db/realtime_server
9+
- PRIMARY_DB_USERNAME=${PRIMARY_DB_USERNAME}
10+
- PRIMARY_DB_PASSWORD=${PRIMARY_DB_PASSWORD}
11+
- PRIMARY_DB_NAME=${PRIMARY_DB_NAME}
12+
- PRIMARY_DB_HOST=${PRIMARY_DB_HOST}
13+
- PRIMARY_DB_PORT=${PRIMARY_DB_PORT}
14+
- REPLICA_1_DB_USERNAME=${REPLICA_1_DB_USERNAME}
15+
- REPLICA_1_DB_PASSWORD=${REPLICA_1_DB_PASSWORD}
16+
- REPLICA_1_DB_NAME=${REPLICA_1_DB_NAME}
17+
- REPLICA_1_DB_HOST=${REPLICA_1_DB_HOST}
18+
- REPLICA_1_DB_PORT=${REPLICA_1_DB_PORT}
19+
- REPLICA_2_DB_USERNAME=${REPLICA_2_DB_USERNAME}
20+
- REPLICA_2_DB_PASSWORD=${REPLICA_2_DB_PASSWORD}
21+
- REPLICA_2_DB_NAME=${REPLICA_2_DB_NAME}
22+
- REPLICA_2_DB_HOST=${REPLICA_2_DB_HOST}
23+
- REPLICA_2_DB_PORT=${REPLICA_2_DB_PORT}
1024
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
1125
- FIREBASE_PROJECT_ID=${FIREBASE_PROJECT_ID}
1226
- FIREBASE_PRIVATE_KEY=${FIREBASE_PRIVATE_KEY}
1327
- FIREBASE_CLIENT_EMAIL=${FIREBASE_CLIENT_EMAIL}
1428
- GUARDIAN_SECRET_KEY=${GUARDIAN_SECRET_KEY}
15-
depends_on:
16-
- db
17-
18-
db:
19-
image: mysql:8.0
20-
ports:
21-
- "3306:3306"
22-
environment:
23-
- MYSQL_ROOT_PASSWORD=rootpassword
24-
- MYSQL_DATABASE=realtime_server
25-
- MYSQL_USER=realtime_server
26-
- MYSQL_PASSWORD=password
27-
volumes:
28-
- mysql_data:/var/lib/mysql
29-
30-
volumes:
31-
mysql_data:

0 commit comments

Comments
 (0)