Added js fetcher
This commit is contained in:
parent
3de474fbd2
commit
94a2e8415d
|
|
@ -6,6 +6,21 @@ when:
|
|||
branch: main
|
||||
|
||||
steps:
|
||||
build-fetcher:
|
||||
image: woodpeckerci/plugin-docker-buildx
|
||||
privileged: true
|
||||
settings:
|
||||
platforms: linux/amd64
|
||||
registry: git.georgew.dev
|
||||
repo: git.georgew.dev/georgew/surf-hub-fetcher
|
||||
tags: latest
|
||||
dockerfile: fetcher/Dockerfile
|
||||
context: fetcher
|
||||
username:
|
||||
from_secret: FORGEJO_USER
|
||||
password:
|
||||
from_secret: FORGEJO_TOKEN
|
||||
|
||||
deploy:
|
||||
image: docker:28-cli
|
||||
privileged: true
|
||||
|
|
@ -14,6 +29,13 @@ steps:
|
|||
- /home/george:/home/george
|
||||
environment:
|
||||
APP_NAME: *app_name
|
||||
FORGEJO_USER:
|
||||
from_secret: FORGEJO_USER
|
||||
FORGEJO_TOKEN:
|
||||
from_secret: FORGEJO_TOKEN
|
||||
commands:
|
||||
- cp -r . /home/george/$APP_NAME/
|
||||
- docker compose -p $APP_NAME -f /home/george/$APP_NAME/docker-compose.yaml up -d --pull always --force-recreate
|
||||
- echo $FORGEJO_TOKEN | docker login git.georgew.dev -u $FORGEJO_USER --password-stdin
|
||||
- mkdir -p /home/george/$APP_NAME
|
||||
- cp docker-compose.yaml /home/george/$APP_NAME/
|
||||
- docker compose -p $APP_NAME -f /home/george/$APP_NAME/docker-compose.yaml pull
|
||||
- docker compose -p $APP_NAME -f /home/george/$APP_NAME/docker-compose.yaml up -d --force-recreate --remove-orphans
|
||||
|
|
@ -25,6 +25,20 @@ services:
|
|||
volumes:
|
||||
- grafana_data:/var/lib/grafana
|
||||
|
||||
fetcher:
|
||||
image: git.georgew.dev/georgew/surf-hub-fetcher:latest
|
||||
container_name: surf-fetcher
|
||||
restart: always
|
||||
networks:
|
||||
- web_traffic
|
||||
depends_on:
|
||||
- influxdb
|
||||
environment:
|
||||
- INFLUX_URL=http://influxdb:8086
|
||||
- INFLUX_TOKEN=${INFLUX_TOKEN}
|
||||
- INFLUX_ORG=${DOCKER_INFLUXDB_INIT_ORG}
|
||||
- INFLUX_BUCKET=${DOCKER_INFLUXDB_INIT_BUCKET}
|
||||
|
||||
volumes:
|
||||
influxdb_data:
|
||||
grafana_data:
|
||||
|
|
|
|||
10
fetcher/Dockerfile
Normal file
10
fetcher/Dockerfile
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
FROM node:20-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN npm install --production
|
||||
|
||||
COPY . .
|
||||
|
||||
CMD ["node", "index.js"]
|
||||
42
fetcher/index.js
Normal file
42
fetcher/index.js
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
const { InfluxDB, Point } = require('@influxdata/influxdb-client');
|
||||
const axios = require('axios');
|
||||
|
||||
const token = process.env.INFLUX_TOKEN;
|
||||
const url = process.env.INFLUX_URL;
|
||||
const org = process.env.DOCKER_INFLUXDB_INIT_ORG;
|
||||
const bucket = process.env.DOCKER_INFLUXDB_INIT_BUCKET;
|
||||
|
||||
const client = new InfluxDB({ url, token });
|
||||
const writeApi = client.getWriteApi(org, bucket);
|
||||
|
||||
async function fetchSurfData() {
|
||||
try {
|
||||
// Change these coordinates to your local beach!
|
||||
// These are for Bondi Beach, Sydney as an example.
|
||||
const lat = -33.89;
|
||||
const lon = 151.27;
|
||||
|
||||
console.log("🌊 Fetching latest swell data...");
|
||||
const response = await axios.get(`https://marine-api.open-meteo.com/v1/marine?latitude=${lat}&longitude=${lon}¤t=swell_wave_height,swell_wave_period`);
|
||||
|
||||
const swellHeight = response.data.current.swell_wave_height;
|
||||
const swellPeriod = response.data.current.swell_wave_period;
|
||||
|
||||
const point = new Point('surf_conditions')
|
||||
.tag('location', 'local_break')
|
||||
.floatField('swell_height', swellHeight)
|
||||
.floatField('swell_period', swellPeriod);
|
||||
|
||||
writeApi.writePoint(point);
|
||||
// Important: Flush the buffer to ensure data is sent
|
||||
await writeApi.flush();
|
||||
|
||||
console.log(`✅ Sent: ${swellHeight}m at ${swellPeriod}s`);
|
||||
} catch (error) {
|
||||
console.error("❌ Fetch error:", error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch every hour
|
||||
setInterval(fetchSurfData, 1000 * 60 * 60);
|
||||
fetchSurfData();
|
||||
10
fetcher/package.json
Normal file
10
fetcher/package.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"name": "surf-hub-fetcher",
|
||||
"version": "1.0.0",
|
||||
"description": "Polls surf APIs and sends data to InfluxDB",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@influxdata/influxdb-client": "^1.33.0",
|
||||
"axios": "^1.6.0"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue