version: "3"

services:
    mqtt:
        image: eclipse-mosquitto
        ports:
            - 1883:1883
            - 9001:9001
        volumes:
            - ./mosquitto.conf:/mosquitto/config/mosquitto.conf
            - ./.passwords:/mosquitto/passwd_file
            - mosquitto-data:/mosquitto/data
            - mosquitto-logs:/mosquitto/log
        restart: unless-stopped

    influxdb:
        image: influxdb:2.0
        ports:
            - 8086:8086
        volumes:
            - ./influxdb-config:/etc/influxdb2
            - ./influxdb-data:/var/lib/influxdb2
        env_file:
            - ./config.env
        depends_on:
            - mqtt
        restart: unless-stopped

    mqtt_client:
        image: reg.reaweb.uk/mqtt-client
        build:
            context: ./mqtt-client
            dockerfile: Dockerfile
        env_file:
            - ./config.env
        depends_on:
            - influxdb
            - pushgateway
        restart: unless-stopped

    snmp_client:
        image: reg.reaweb.uk/snmp-client
        build:
            context: ./switch-snmp
            dockerfile: Dockerfile
        env_file:
            - ./config.env
        depends_on:
            - influxdb
            - pushgateway
        restart: unless-stopped
        volumes:
            - ./switch-snmp/omada-switches.conf:/app/omada-switches.conf
            - ./switch-snmp/mikrotik-switches.conf:/app/mikrotik-switches.conf
            - ./switch-snmp/mikrotik.pem:/app/mikrotik.pem

    grafana:
        image: grafana/grafana:8.5.27
        ports:
            - 3000:3000
        environment:
            - GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=grafana-sankey-panel
        depends_on:
            - influxdb
            - prometheus
        restart: unless-stopped
        volumes:
            - grafana:/var/lib/grafana

    prometheus:
        image: prom/prometheus
        volumes:
            - ./prometheus/:/etc/prometheus/
        command:
            - --config.file=/etc/prometheus/prometheus.yml
            - --web.config.file=/etc/prometheus/web.yml
        ports:
            - 9090:9090
        restart: unless-stopped

    pushgateway:
        image: prom/pushgateway
        restart: unless-stopped


volumes:
    mosquitto-data:
    mosquitto-logs:
    grafana: