Files

1 line
32 KiB
JSON

{"repo": "andrei9383/windmon", "files": {"api/src/main/resources/application.properties": {"7a34de146cc98d2082bef5fab3c9446732204957": {"t": 1785745399.9588223, "n": 2204, "h": "d618d1b70fdf96b2", "c": "spring.application.name=windmon-api\n\n# ── Database ──\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:}\nspring.datasource.driver-class-name=org.postgresql.Driver\nspring.datasource.hikari.maximum-pool-size=20\nspring.datasource.hikari.minimum-idle=5\nspring.datasource.hikari.connection-timeout=10000\nspring.datasource.hikari.idle-timeout=300000\nspring.datasource.hikari.max-lifetime=600000\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\n# ── Server ──\nserver.port=8080\nserver.shutdown=graceful\nserver.forward-headers-strategy=framework\nspring.lifecycle.timeout-per-shutdown-phase=15s\nserver.tomcat.connection-timeout=5s\nserver.tomcat.keep-alive-timeout=30s\nserver.tomcat.max-connections=200\nserver.tomcat.threads.max=50\n\n# ── Redis / Cache ──\nspring.data.redis.host=${SPRING_DATA_REDIS_HOST:localhost}\nspring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379}\nspring.data.redis.timeout=2000\nspring.cache.type=redis\n\n# ── Logging ──\nlogging.level.com.windmon=INFO\nlogging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%X{correlationId:-}] [%X{tenantId:-}] %-5level %logger{36} - %msg%n\n\n# ── DeepSeek AI ──\ndeepseek.api-key=${DEEPSEEK_API_KEY:}\ndeepseek.api-url=https://api.deepseek.com/chat/completions\ndeepseek.connect-timeout-ms=5000\ndeepseek.read-timeout-ms=30000\ndeepseek.max-retries=3\n\n# ── Rate Limiting ──\nratelimit.api.requests-per-minute=100\nratelimit.ai.requests-per-minute=10\n\n# ── Actuator ──\nmanagement.endpoints.web.exposure.include=health,info,metrics,prometheus\nmanagement.endpoint.health.show-details=when-authorized\n\n# ── Flyway ──\nspring.flyway.enabled=true\nspring.flyway.baseline-on-migrate=true\nspring.flyway.baseline-version=0\nspring.flyway.locations=classpath:db/migration\nmanagement.metrics.tags.application=${spring.application.name}\n\n# ── OpenAPI / Swagger UI ──\nspringdoc.api-docs.path=/v3/api-docs\nspringdoc.swagger-ui.path=/swagger-ui.html\nspringdoc.swagger-ui.tags-sorter=alpha\nspringdoc.swagger-ui.operations-sorter=method\n"}, "88a0b0b032b49b7f05d05e9a419bc2b94b149358": {"t": 1785752728.759336, "n": 2204, "h": "d618d1b70fdf96b2", "c": "spring.application.name=windmon-api\n\n# ── Database ──\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:}\nspring.datasource.driver-class-name=org.postgresql.Driver\nspring.datasource.hikari.maximum-pool-size=20\nspring.datasource.hikari.minimum-idle=5\nspring.datasource.hikari.connection-timeout=10000\nspring.datasource.hikari.idle-timeout=300000\nspring.datasource.hikari.max-lifetime=600000\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\n# ── Server ──\nserver.port=8080\nserver.shutdown=graceful\nserver.forward-headers-strategy=framework\nspring.lifecycle.timeout-per-shutdown-phase=15s\nserver.tomcat.connection-timeout=5s\nserver.tomcat.keep-alive-timeout=30s\nserver.tomcat.max-connections=200\nserver.tomcat.threads.max=50\n\n# ── Redis / Cache ──\nspring.data.redis.host=${SPRING_DATA_REDIS_HOST:localhost}\nspring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379}\nspring.data.redis.timeout=2000\nspring.cache.type=redis\n\n# ── Logging ──\nlogging.level.com.windmon=INFO\nlogging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%X{correlationId:-}] [%X{tenantId:-}] %-5level %logger{36} - %msg%n\n\n# ── DeepSeek AI ──\ndeepseek.api-key=${DEEPSEEK_API_KEY:}\ndeepseek.api-url=https://api.deepseek.com/chat/completions\ndeepseek.connect-timeout-ms=5000\ndeepseek.read-timeout-ms=30000\ndeepseek.max-retries=3\n\n# ── Rate Limiting ──\nratelimit.api.requests-per-minute=100\nratelimit.ai.requests-per-minute=10\n\n# ── Actuator ──\nmanagement.endpoints.web.exposure.include=health,info,metrics,prometheus\nmanagement.endpoint.health.show-details=when-authorized\n\n# ── Flyway ──\nspring.flyway.enabled=true\nspring.flyway.baseline-on-migrate=true\nspring.flyway.baseline-version=0\nspring.flyway.locations=classpath:db/migration\nmanagement.metrics.tags.application=${spring.application.name}\n\n# ── OpenAPI / Swagger UI ──\nspringdoc.api-docs.path=/v3/api-docs\nspringdoc.swagger-ui.path=/swagger-ui.html\nspringdoc.swagger-ui.tags-sorter=alpha\nspringdoc.swagger-ui.operations-sorter=method\n"}, "7c62d29ef443d6d06981b31cabf64fae379d8415": {"t": 1785752731.2215168, "n": 2162, "h": "45c2419066c9cdc9", "c": "spring.application.name=windmon-api\n\n# ── Database ──\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:}\nspring.datasource.driver-class-name=org.postgresql.Driver\nspring.datasource.hikari.maximum-pool-size=20\nspring.datasource.hikari.minimum-idle=5\nspring.datasource.hikari.connection-timeout=10000\nspring.datasource.hikari.idle-timeout=300000\nspring.datasource.hikari.max-lifetime=600000\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\n# ── Server ──\nserver.port=8080\nserver.shutdown=graceful\nspring.lifecycle.timeout-per-shutdown-phase=15s\nserver.tomcat.connection-timeout=5s\nserver.tomcat.keep-alive-timeout=30s\nserver.tomcat.max-connections=200\nserver.tomcat.threads.max=50\n\n# ── Redis / Cache ──\nspring.data.redis.host=${SPRING_DATA_REDIS_HOST:localhost}\nspring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379}\nspring.data.redis.timeout=2000\nspring.cache.type=redis\n\n# ── Logging ──\nlogging.level.com.windmon=INFO\nlogging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%X{correlationId:-}] [%X{tenantId:-}] %-5level %logger{36} - %msg%n\n\n# ── DeepSeek AI ──\ndeepseek.api-key=${DEEPSEEK_API_KEY:}\ndeepseek.api-url=https://api.deepseek.com/chat/completions\ndeepseek.connect-timeout-ms=5000\ndeepseek.read-timeout-ms=30000\ndeepseek.max-retries=3\n\n# ── Rate Limiting ──\nratelimit.api.requests-per-minute=100\nratelimit.ai.requests-per-minute=10\n\n# ── Actuator ──\nmanagement.endpoints.web.exposure.include=health,info,metrics,prometheus\nmanagement.endpoint.health.show-details=when-authorized\n\n# ── Flyway ──\nspring.flyway.enabled=true\nspring.flyway.baseline-on-migrate=true\nspring.flyway.baseline-version=0\nspring.flyway.locations=classpath:db/migration\nmanagement.metrics.tags.application=${spring.application.name}\n\n# ── OpenAPI / Swagger UI ──\nspringdoc.api-docs.path=/v3/api-docs\nspringdoc.swagger-ui.path=/swagger-ui.html\nspringdoc.swagger-ui.tags-sorter=alpha\nspringdoc.swagger-ui.operations-sorter=method\n"}, "969744f7129b162c32429a2bacbb3692198739b2": {"t": 1785752733.88495, "n": 2000, "h": "461ee6078c91f03d", "c": "spring.application.name=windmon-api\n\n# ── Database ──\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:}\nspring.datasource.driver-class-name=org.postgresql.Driver\nspring.datasource.hikari.maximum-pool-size=20\nspring.datasource.hikari.minimum-idle=5\nspring.datasource.hikari.connection-timeout=10000\nspring.datasource.hikari.idle-timeout=300000\nspring.datasource.hikari.max-lifetime=600000\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\n# ── Server ──\nserver.port=8080\nserver.shutdown=graceful\nspring.lifecycle.timeout-per-shutdown-phase=15s\nserver.tomcat.connection-timeout=5s\nserver.tomcat.keep-alive-timeout=30s\nserver.tomcat.max-connections=200\nserver.tomcat.threads.max=50\n\n# ── Redis / Cache ──\nspring.data.redis.host=${SPRING_DATA_REDIS_HOST:localhost}\nspring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379}\nspring.data.redis.timeout=2000\nspring.cache.type=redis\n\n# ── Logging ──\nlogging.level.com.windmon=INFO\nlogging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%X{correlationId:-}] [%X{tenantId:-}] %-5level %logger{36} - %msg%n\n\n# ── DeepSeek AI ──\ndeepseek.api-key=${DEEPSEEK_API_KEY:}\ndeepseek.api-url=https://api.deepseek.com/chat/completions\ndeepseek.connect-timeout-ms=5000\ndeepseek.read-timeout-ms=30000\ndeepseek.max-retries=3\n\n# ── Rate Limiting ──\nratelimit.api.requests-per-minute=100\nratelimit.ai.requests-per-minute=10\n\n# ── Actuator ──\nmanagement.endpoints.web.exposure.include=health,info,metrics,prometheus\nmanagement.endpoint.health.show-details=when-authorized\nmanagement.metrics.tags.application=${spring.application.name}\n\n# ── OpenAPI / Swagger UI ──\nspringdoc.api-docs.path=/v3/api-docs\nspringdoc.swagger-ui.path=/swagger-ui.html\nspringdoc.swagger-ui.tags-sorter=alpha\nspringdoc.swagger-ui.operations-sorter=method\n"}, "0aa5826be0f626db17989f9906109a361e8804ae": {"t": 1785752736.5640936, "n": 2000, "h": "efc69868eff6aa1b", "c": "spring.application.name=windmon-api\n\n# ── Database ──\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:}\nspring.datasource.driver-class-name=org.postgresql.Driver\nspring.datasource.hikari.maximum-pool-size=20\nspring.datasource.hikari.minimum-idle=5\nspring.datasource.hikari.connection-timeout=10000\nspring.datasource.hikari.idle-timeout=300000\nspring.datasource.hikari.max-lifetime=600000\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\n# ── Server ──\nserver.port=8080\nserver.shutdown=graceful\nspring.lifecycle.timeout-per-shutdown-phase=15s\nserver.tomcat.connection-timeout=5s\nserver.tomcat.keep-alive-timeout=30s\nserver.tomcat.max-connections=200\nserver.tomcat.threads.max=50\n\n# ── Redis / Cache ──\nspring.data.redis.host=${SPRING_DATA_REDIS_HOST:localhost}\nspring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379}\nspring.data.redis.timeout=2000\nspring.cache.type=redis\n\n# ── Logging ──\nlogging.level.com.windmon=INFO\nlogging.pattern.console=%d{yyyy-MM-dd HH:%M:%S} [%X{correlationId:-}] [%X{tenantId:-}] %-5level %logger{36} - %msg%n\n\n# ── DeepSeek AI ──\ndeepseek.api-key=${DEEPSEEK_API_KEY:}\ndeepseek.api-url=https://api.deepseek.com/chat/completions\ndeepseek.connect-timeout-ms=5000\ndeepseek.read-timeout-ms=30000\ndeepseek.max-retries=3\n\n# ── Rate Limiting ──\nratelimit.api.requests-per-minute=100\nratelimit.ai.requests-per-minute=10\n\n# ── Actuator ──\nmanagement.endpoints.web.exposure.include=health,info,metrics,prometheus\nmanagement.endpoint.health.show-details=when-authorized\nmanagement.metrics.tags.application=${spring.application.name}\n\n# ── OpenAPI / Swagger UI ──\nspringdoc.api-docs.path=/v3/api-docs\nspringdoc.swagger-ui.path=/swagger-ui.html\nspringdoc.swagger-ui.tags-sorter=alpha\nspringdoc.swagger-ui.operations-sorter=method\n"}, "cb04cfcd9cf8a11208c2b6dd74d66a4dbc191fce": {"t": 1785752738.0056558, "n": 848, "h": "331e5e4df77d0805", "c": "spring.application.name=windmon-api\n\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:<REDACTED_DB_PASSWORD>}\nspring.datasource.driver-class-name=org.postgresql.Driver\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\nserver.port=8080\n\nlogging.level.com.windmon=INFO\n\n# DeepSeek AI\ndeepseek.api-key=${DEEPSEEK_API_KEY:<REDACTED_DEEPSEEK_KEY>}\ndeepseek.api-url=https://api.deepseek.com/chat/completions\n\n# OpenAPI / Swagger UI\nspringdoc.api-docs.path=/v3/api-docs\nspringdoc.swagger-ui.path=/swagger-ui.html\nspringdoc.swagger-ui.tags-sorter=alpha\nspringdoc.swagger-ui.operations-sorter=method\n"}, "ff32dc336369f0929c4cc75a8c9f102c42e7b4f6": {"t": 1785752740.9810164, "n": 713, "h": "62dd2fd4c34f4438", "c": "spring.application.name=windmon-api\n\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:<REDACTED_DB_PASSWORD>}\nspring.datasource.driver-class-name=org.postgresql.Driver\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\nserver.port=8080\n\nlogging.level.com.windmon=INFO\n\n# OpenAPI / Swagger UI\nspringdoc.api-docs.path=/v3/api-docs\nspringdoc.swagger-ui.path=/swagger-ui.html\nspringdoc.swagger-ui.tags-sorter=alpha\nspringdoc.swagger-ui.operations-sorter=method\n"}, "fdc5e0d4df1a87a9480e5bcb3e2361878c6dad99": {"t": 1785752742.3191462, "n": 524, "h": "a8bef5a1cfa254ed", "c": "spring.application.name=windmon-api\n\nspring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/windmon}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME:windmon}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD:<REDACTED_DB_PASSWORD>}\nspring.datasource.driver-class-name=org.postgresql.Driver\n\nspring.jpa.hibernate.ddl-auto=validate\nspring.jpa.show-sql=false\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n\nserver.port=8080\n\nlogging.level.com.windmon=INFO\n"}}, "docker-compose.yml": {"7a34de146cc98d2082bef5fab3c9446732204957": {"t": 1785747393.1507013, "n": 4186, "h": "e689fd272def39b0", "c": "services:\n db:\n image: postgres:16-alpine\n container_name: windmon-db\n environment:\n POSTGRES_DB: ${POSTGRES_DB:-windmon}\n POSTGRES_USER: ${POSTGRES_USER:-windmon}\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n ports:\n - \"5432:5432\"\n volumes:\n - ./db/init.sql:/docker-entrypoint-initdb.d/01-init.sql\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U windmon\"]\n interval: 5s\n timeout: 5s\n retries: 5\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 512M\n\n redis:\n image: redis:7-alpine\n container_name: windmon-redis\n ports:\n - \"6379:6379\"\n volumes:\n - redisdata:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 5s\n timeout: 3s\n retries: 5\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 256M\n\n pipelines:\n build:\n context: ./pipelines\n dockerfile: Dockerfile\n container_name: windmon-pipelines\n depends_on:\n db:\n condition: service_healthy\n environment:\n DB_HOST: db\n DB_PORT: 5432\n DB_NAME: ${POSTGRES_DB:-windmon}\n DB_USER: ${POSTGRES_USER:-windmon}\n DB_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:?Set AWS_ACCESS_KEY_ID in .env}\n AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:?Set AWS_SECRET_ACCESS_KEY in .env}\n AWS_REGION: ${AWS_REGION:-eu-central-1}\n S3_BUCKET: ${S3_BUCKET:-ppcro-rr-noprod-app00176-development-s3-2}\n volumes:\n - ./pipelines:/app\n healthcheck:\n test: [\"CMD-SHELL\", \"python -c 'import urllib.request; urllib.request.urlopen(\\\"http://localhost:8000/health\\\")'\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 120s\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 1G\n\n api:\n build:\n context: ./api\n dockerfile: Dockerfile\n container_name: windmon-api\n depends_on:\n db:\n condition: service_healthy\n redis:\n condition: service_healthy\n ports:\n - \"8080:8080\"\n environment:\n SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB:-windmon}\n SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER:-windmon}\n SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n SPRING_DATA_REDIS_HOST: redis\n SPRING_DATA_REDIS_PORT: 6379\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:?Set DEEPSEEK_API_KEY in .env}\n healthcheck:\n test: [\"CMD-SHELL\", \"curl -sf http://localhost:8080/api/health || exit 1\"]\n interval: 15s\n timeout: 5s\n retries: 3\n start_period: 30s\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 768M\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: windmon-frontend\n depends_on:\n - api\n ports:\n - \"3000:80\"\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 128M\n\n prometheus:\n image: prom/prometheus:v2.51.0\n container_name: windmon-prometheus\n volumes:\n - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro\n - promdata:/prometheus\n ports:\n - \"9090:9090\"\n depends_on:\n - api\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 256M\n\n grafana:\n image: grafana/grafana:10.4.2\n container_name: windmon-grafana\n environment:\n GF_SECURITY_ADMIN_USER: ${GRAFANA_USER:-admin}\n GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-windmon}\n GF_USERS_ALLOW_SIGN_UP: \"false\"\n volumes:\n - ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro\n - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro\n - grafanadata:/var/lib/grafana\n ports:\n - \"3001:3000\"\n depends_on:\n - prometheus\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 256M\n\nvolumes:\n pgdata:\n redisdata:\n promdata:\n grafanadata:\n"}, "828eacd7862f9645ee077eed0ba62eb8838e5f24": {"t": 1785752734.4767206, "n": 4186, "h": "e689fd272def39b0", "c": "services:\n db:\n image: postgres:16-alpine\n container_name: windmon-db\n environment:\n POSTGRES_DB: ${POSTGRES_DB:-windmon}\n POSTGRES_USER: ${POSTGRES_USER:-windmon}\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n ports:\n - \"5432:5432\"\n volumes:\n - ./db/init.sql:/docker-entrypoint-initdb.d/01-init.sql\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U windmon\"]\n interval: 5s\n timeout: 5s\n retries: 5\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 512M\n\n redis:\n image: redis:7-alpine\n container_name: windmon-redis\n ports:\n - \"6379:6379\"\n volumes:\n - redisdata:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 5s\n timeout: 3s\n retries: 5\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 256M\n\n pipelines:\n build:\n context: ./pipelines\n dockerfile: Dockerfile\n container_name: windmon-pipelines\n depends_on:\n db:\n condition: service_healthy\n environment:\n DB_HOST: db\n DB_PORT: 5432\n DB_NAME: ${POSTGRES_DB:-windmon}\n DB_USER: ${POSTGRES_USER:-windmon}\n DB_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:?Set AWS_ACCESS_KEY_ID in .env}\n AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:?Set AWS_SECRET_ACCESS_KEY in .env}\n AWS_REGION: ${AWS_REGION:-eu-central-1}\n S3_BUCKET: ${S3_BUCKET:-ppcro-rr-noprod-app00176-development-s3-2}\n volumes:\n - ./pipelines:/app\n healthcheck:\n test: [\"CMD-SHELL\", \"python -c 'import urllib.request; urllib.request.urlopen(\\\"http://localhost:8000/health\\\")'\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 120s\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 1G\n\n api:\n build:\n context: ./api\n dockerfile: Dockerfile\n container_name: windmon-api\n depends_on:\n db:\n condition: service_healthy\n redis:\n condition: service_healthy\n ports:\n - \"8080:8080\"\n environment:\n SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB:-windmon}\n SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER:-windmon}\n SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n SPRING_DATA_REDIS_HOST: redis\n SPRING_DATA_REDIS_PORT: 6379\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:?Set DEEPSEEK_API_KEY in .env}\n healthcheck:\n test: [\"CMD-SHELL\", \"curl -sf http://localhost:8080/api/health || exit 1\"]\n interval: 15s\n timeout: 5s\n retries: 3\n start_period: 30s\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 768M\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: windmon-frontend\n depends_on:\n - api\n ports:\n - \"3000:80\"\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 128M\n\n prometheus:\n image: prom/prometheus:v2.51.0\n container_name: windmon-prometheus\n volumes:\n - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro\n - promdata:/prometheus\n ports:\n - \"9090:9090\"\n depends_on:\n - api\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 256M\n\n grafana:\n image: grafana/grafana:10.4.2\n container_name: windmon-grafana\n environment:\n GF_SECURITY_ADMIN_USER: ${GRAFANA_USER:-admin}\n GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-windmon}\n GF_USERS_ALLOW_SIGN_UP: \"false\"\n volumes:\n - ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro\n - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro\n - grafanadata:/var/lib/grafana\n ports:\n - \"3001:3000\"\n depends_on:\n - prometheus\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 256M\n\nvolumes:\n pgdata:\n redisdata:\n promdata:\n grafanadata:\n"}, "0aa5826be0f626db17989f9906109a361e8804ae": {"t": 1785752739.042122, "n": 3196, "h": "155dc2f01488b472", "c": "services:\n db:\n image: postgres:16-alpine\n container_name: windmon-db\n environment:\n POSTGRES_DB: ${POSTGRES_DB:-windmon}\n POSTGRES_USER: ${POSTGRES_USER:-windmon}\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n ports:\n - \"5432:5432\"\n volumes:\n - ./db/init.sql:/docker-entrypoint-initdb.d/01-init.sql\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U windmon\"]\n interval: 5s\n timeout: 5s\n retries: 5\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 512M\n\n redis:\n image: redis:7-alpine\n container_name: windmon-redis\n ports:\n - \"6379:6379\"\n volumes:\n - redisdata:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 5s\n timeout: 3s\n retries: 5\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 256M\n\n pipelines:\n build:\n context: ./pipelines\n dockerfile: Dockerfile\n container_name: windmon-pipelines\n depends_on:\n db:\n condition: service_healthy\n environment:\n DB_HOST: db\n DB_PORT: 5432\n DB_NAME: ${POSTGRES_DB:-windmon}\n DB_USER: ${POSTGRES_USER:-windmon}\n DB_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:?Set AWS_ACCESS_KEY_ID in .env}\n AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:?Set AWS_SECRET_ACCESS_KEY in .env}\n AWS_REGION: ${AWS_REGION:-eu-central-1}\n S3_BUCKET: ${S3_BUCKET:-ppcro-rr-noprod-app00176-development-s3-2}\n volumes:\n - ./pipelines:/app\n healthcheck:\n test: [\"CMD-SHELL\", \"python -c 'import urllib.request; urllib.request.urlopen(\\\"http://localhost:8000/health\\\")'\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 120s\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 1G\n\n api:\n build:\n context: ./api\n dockerfile: Dockerfile\n container_name: windmon-api\n depends_on:\n db:\n condition: service_healthy\n redis:\n condition: service_healthy\n ports:\n - \"8080:8080\"\n environment:\n SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB:-windmon}\n SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER:-windmon}\n SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}\n SPRING_DATA_REDIS_HOST: redis\n SPRING_DATA_REDIS_PORT: 6379\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:?Set DEEPSEEK_API_KEY in .env}\n healthcheck:\n test: [\"CMD-SHELL\", \"curl -sf http://localhost:8080/api/health || exit 1\"]\n interval: 15s\n timeout: 5s\n retries: 3\n start_period: 30s\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 768M\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: windmon-frontend\n depends_on:\n - api\n ports:\n - \"3000:80\"\n restart: unless-stopped\n deploy:\n resources:\n limits:\n memory: 128M\n\nvolumes:\n pgdata:\n redisdata:\n"}, "cb04cfcd9cf8a11208c2b6dd74d66a4dbc191fce": {"t": 1785752740.7873526, "n": 1673, "h": "5a271c389d035ad8", "c": "version: '3.8'\n\nservices:\n db:\n image: postgres:16-alpine\n container_name: windmon-db\n environment:\n POSTGRES_DB: windmon\n POSTGRES_USER: windmon\n POSTGRES_PASSWORD: <REDACTED_DB_PASSWORD>\n ports:\n - \"5432:5432\"\n volumes:\n - ./db/init.sql:/docker-entrypoint-initdb.d/01-init.sql\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U windmon\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n pipelines:\n build:\n context: ./pipelines\n dockerfile: Dockerfile\n container_name: windmon-pipelines\n depends_on:\n db:\n condition: service_healthy\n environment:\n DB_HOST: db\n DB_PORT: 5432\n DB_NAME: windmon\n DB_USER: windmon\n DB_PASSWORD: <REDACTED_DB_PASSWORD>\n AWS_ACCESS_KEY_ID: <REDACTED_AWS_ACCESS_KEY>\n AWS_SECRET_ACCESS_KEY: <REDACTED_AWS_SECRET_KEY>\n AWS_REGION: eu-central-1\n S3_BUCKET: ppcro-rr-noprod-app00176-development-s3-2\n volumes:\n - ./pipelines:/app\n\n api:\n build:\n context: ./api\n dockerfile: Dockerfile\n container_name: windmon-api\n depends_on:\n db:\n condition: service_healthy\n ports:\n - \"8080:8080\"\n environment:\n SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/windmon\n SPRING_DATASOURCE_USERNAME: windmon\n SPRING_DATASOURCE_PASSWORD: <REDACTED_DB_PASSWORD>\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-<REDACTED_DEEPSEEK_KEY>}\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: windmon-frontend\n depends_on:\n - api\n ports:\n - \"3000:80\"\n\nvolumes:\n pgdata:\n"}, "8e1a3666b80c60598f74a8f0f8fd4a27ac685e51": {"t": 1785752742.2590277, "n": 1604, "h": "5263e95f4d6c474c", "c": "version: '3.8'\n\nservices:\n db:\n image: postgres:16-alpine\n container_name: windmon-db\n environment:\n POSTGRES_DB: windmon\n POSTGRES_USER: windmon\n POSTGRES_PASSWORD: <REDACTED_DB_PASSWORD>\n ports:\n - \"5432:5432\"\n volumes:\n - ./db/init.sql:/docker-entrypoint-initdb.d/01-init.sql\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U windmon\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n pipelines:\n build:\n context: ./pipelines\n dockerfile: Dockerfile\n container_name: windmon-pipelines\n depends_on:\n db:\n condition: service_healthy\n environment:\n DB_HOST: db\n DB_PORT: 5432\n DB_NAME: windmon\n DB_USER: windmon\n DB_PASSWORD: <REDACTED_DB_PASSWORD>\n AWS_ACCESS_KEY_ID: <REDACTED_AWS_ACCESS_KEY>\n AWS_SECRET_ACCESS_KEY: <REDACTED_AWS_SECRET_KEY>\n AWS_REGION: eu-central-1\n S3_BUCKET: ppcro-rr-noprod-app00176-development-s3-2\n volumes:\n - ./pipelines:/app\n\n api:\n build:\n context: ./api\n dockerfile: Dockerfile\n container_name: windmon-api\n depends_on:\n db:\n condition: service_healthy\n ports:\n - \"8080:8080\"\n environment:\n SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/windmon\n SPRING_DATASOURCE_USERNAME: windmon\n SPRING_DATASOURCE_PASSWORD: <REDACTED_DB_PASSWORD>\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: windmon-frontend\n depends_on:\n - api\n ports:\n - \"3000:80\"\n\nvolumes:\n pgdata:\n"}, "fdc5e0d4df1a87a9480e5bcb3e2361878c6dad99": {"t": 1785752743.3899803, "n": 1674, "h": "7fda4cff61b8705d", "c": "version: '3.8'\n\nservices:\n db:\n image: postgres:16-alpine\n container_name: windmon-db\n environment:\n POSTGRES_DB: windmon\n POSTGRES_USER: windmon\n POSTGRES_PASSWORD: <REDACTED_DB_PASSWORD>\n ports:\n - \"5432:5432\"\n volumes:\n - ./db/init.sql:/docker-entrypoint-initdb.d/01-init.sql\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U windmon\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n pipelines:\n build:\n context: ./pipelines\n dockerfile: Dockerfile\n container_name: windmon-pipelines\n depends_on:\n db:\n condition: service_healthy\n environment:\n DB_HOST: db\n DB_PORT: 5432\n DB_NAME: windmon\n DB_USER: windmon\n DB_PASSWORD: <REDACTED_DB_PASSWORD>\n AWS_ACCESS_KEY_ID: <REDACTED_AWS_ACCESS_KEY>\n AWS_SECRET_ACCESS_KEY: <REDACTED_AWS_SECRET_KEY>\n AWS_REGION: eu-central-1\n S3_BUCKET: ppcro-rr-noprod-app00176-development-s3-2\n volumes:\n - ./pipelines:/app\n\n api:\n build:\n context: ./api\n dockerfile: Dockerfile\n container_name: windmon-api\n depends_on:\n db:\n condition: service_healthy\n ports:\n - \"8080:8080\"\n environment:\n SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/windmon\n SPRING_DATASOURCE_USERNAME: windmon\n SPRING_DATASOURCE_PASSWORD: <REDACTED_DB_PASSWORD>\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: windmon-frontend\n depends_on:\n - api\n ports:\n - \"3000:3000\"\n environment:\n REACT_APP_API_URL: http://localhost:8080/api\n\nvolumes:\n pgdata:\n"}}}}