Compare commits
17 Commits
0.0.3
...
e5f9d3e3c8
Author | SHA1 | Date | |
---|---|---|---|
e5f9d3e3c8
|
|||
6f2966800b
|
|||
c0f1bddf29
|
|||
f96aa7c798
|
|||
314b9a421d
|
|||
6cf3b46f76
|
|||
7cf68d5d55
|
|||
8817c3fa12
|
|||
f90c1c2dbb
|
|||
c6fcce2d41
|
|||
828dffd523
|
|||
053927e329
|
|||
b555c9a37f
|
|||
1adf5fa9d0
|
|||
73567d3230
|
|||
f24cdbac1c
|
|||
535af64d1a
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -6,5 +6,6 @@ cube/pubsubc.a
|
||||
test
|
||||
.bash_history
|
||||
.vscode
|
||||
|
||||
.dccache
|
||||
sink/.dccache
|
||||
|
||||
|
@ -1,12 +1,30 @@
|
||||
stages:
|
||||
- check
|
||||
- build
|
||||
- deploy
|
||||
|
||||
include:
|
||||
- project: dockerized/commons
|
||||
ref: master
|
||||
file: gitlab-ci-template.yml
|
||||
variables:
|
||||
IMAGE_NAME: $CI_REGISTRY/$CI_PROJECT_PATH
|
||||
HUB_IMAGE_NAME: wollud1969/sinkserver
|
||||
|
||||
build:
|
||||
image: registry.hottis.de/dockerized/docker-bash:latest
|
||||
stage: build
|
||||
tags:
|
||||
- hottis
|
||||
- linux
|
||||
- docker
|
||||
script:
|
||||
- docker build --build-arg="VERSION=${CI_COMMIT_SHORT_SHA}-${CI_COMMIT_TAG}" --tag $IMAGE_NAME:${CI_COMMIT_SHORT_SHA} .
|
||||
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY;
|
||||
- docker push $IMAGE_NAME:${CI_COMMIT_SHORT_SHA}
|
||||
- if [ "$CI_COMMIT_TAG" != "" ]; then
|
||||
docker tag $IMAGE_NAME:${CI_COMMIT_SHORT_SHA} $IMAGE_NAME:${CI_COMMIT_TAG};
|
||||
docker push $IMAGE_NAME:${CI_COMMIT_TAG};
|
||||
fi
|
||||
- docker login -u $DOCKER_HUB_LOGIN -p $DOCKER_HUB_PASSWORD
|
||||
- docker tag $IMAGE_NAME:${CI_COMMIT_SHORT_SHA} ${HUB_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}
|
||||
- docker push ${HUB_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}
|
||||
|
||||
|
||||
deploy:
|
||||
image: registry.hottis.de/dockerized/docker-bash:latest
|
||||
|
20
Dockerfile
20
Dockerfile
@ -1,4 +1,4 @@
|
||||
FROM alpine:3.13 AS builder
|
||||
FROM alpine:3.18.3 AS builder
|
||||
|
||||
ARG VERSION="dockerized"
|
||||
|
||||
@ -13,20 +13,26 @@ RUN \
|
||||
make VERSION=${VERSION}
|
||||
|
||||
|
||||
FROM alpine:3.13
|
||||
FROM alpine:3.18.3
|
||||
|
||||
ENV PGHOST=""
|
||||
ENV PGDATABASE="mainscnt"
|
||||
ENV PGUSER="sink"
|
||||
ENV PGPASSWORD=""
|
||||
ENV PGSSLMODE="require"
|
||||
ENV LOWER_BOUND="44000"
|
||||
ENV UPPER_BOUND="56000"
|
||||
|
||||
COPY --from=builder /tmp/sink/build/sink20169 /usr/local/bin/
|
||||
|
||||
RUN \
|
||||
apk add --no-cache libpq && \
|
||||
apk add --no-cache libconfig && \
|
||||
mkdir /etc/sink
|
||||
apk add --no-cache libconfig
|
||||
|
||||
EXPOSE 20169/udp
|
||||
USER nobody
|
||||
|
||||
VOLUME /etc/sink
|
||||
|
||||
CMD [ "/usr/local/bin/sink20169", "-f", "/etc/sink/sink20169.cfg", "-n", "nobody", "-v" ]
|
||||
CMD [ "/usr/local/bin/sink20169", "-v" ]
|
||||
|
||||
|
||||
|
||||
|
54
deployment/deploy.yml
Normal file
54
deployment/deploy.yml
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: sinkserver
|
||||
labels:
|
||||
app: sinkserver
|
||||
spec:
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: sinkserver
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: sinkserver
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: hottis-registry-creds
|
||||
containers:
|
||||
- name: sinkserver
|
||||
image: registry.hottis.de/mainscnt/sinkserver:314b9a42
|
||||
ports:
|
||||
- containerPort: 20169
|
||||
protocol: UDP
|
||||
env:
|
||||
- name: PGHOST
|
||||
valueFrom:
|
||||
configMapKeyRef:
|
||||
name: sinkserver-config
|
||||
key: dbhost
|
||||
- name: PGPASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: sinkserver-secret
|
||||
key: dbpass
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: sinkserver
|
||||
labels:
|
||||
app: sinkserver
|
||||
spec:
|
||||
type: LoadBalancer
|
||||
selector:
|
||||
app: sinkserver
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 20169
|
||||
targetPort: 20169
|
||||
|
||||
|
||||
|
@ -32,3 +32,4 @@ Measurement is visualized at https://grafana.mainscnt.eu.
|
||||
The projects of the three current variants are at [RPi](https://home.hottis.de/gitlab/wolutator/mains-frequency-counter-rpi), [STM32](https://home.hottis.de/gitlab/wolutator/mains-frequency-counter-stm32) and [ESP32](https://home.hottis.de/gitlab/wolutator/mains-frequency-counter-esp32).
|
||||
|
||||
|
||||
|
||||
|
@ -17,14 +17,12 @@
|
||||
#include <string.h>
|
||||
#include <getopt.h>
|
||||
#include <pwd.h>
|
||||
#include <libconfig.h>
|
||||
#include <libpq-fe.h>
|
||||
#include <sinkStruct.h>
|
||||
#include <logging.h>
|
||||
#include <sha256.h>
|
||||
|
||||
|
||||
const char DEFAULT_CONFIG_FILENAME[] = "./sink20169.cfg";
|
||||
|
||||
typedef struct {
|
||||
const char *deviceId;
|
||||
@ -34,20 +32,12 @@ typedef struct {
|
||||
PGresult *deviceResult;
|
||||
} t_device;
|
||||
|
||||
typedef struct {
|
||||
config_t cfg;
|
||||
uint16_t numOfDevices;
|
||||
t_device *devices;
|
||||
} t_configHandle;
|
||||
|
||||
#define NUM_OF_STMT_PARAMS 4
|
||||
|
||||
typedef struct {
|
||||
t_configHandle *configHandle;
|
||||
int receiveSockFd;
|
||||
int32_t lowerBound;
|
||||
int32_t upperBound;
|
||||
const char *postgresqlConnInfo;
|
||||
PGconn *conn;
|
||||
t_device foundDevice;
|
||||
} t_commonHandle;
|
||||
@ -61,7 +51,7 @@ int openDatabaseConnection(t_commonHandle *handle) {
|
||||
|
||||
if (! handle->conn) {
|
||||
logmsg(LOG_DEBUG, "Opening connection to database");
|
||||
handle->conn = PQconnectdb(handle->postgresqlConnInfo);
|
||||
handle->conn = PQconnectdb("");
|
||||
} else if (PQstatus(handle->conn) != CONNECTION_OK) {
|
||||
logmsg(LOG_DEBUG, "Resetting connection to database");
|
||||
PQreset(handle->conn);
|
||||
@ -75,22 +65,6 @@ int openDatabaseConnection(t_commonHandle *handle) {
|
||||
return res;
|
||||
}
|
||||
|
||||
int initConfig(const char *configFilename, t_configHandle *configHandle) {
|
||||
config_init(&(configHandle->cfg));
|
||||
if (! config_read_file(&(configHandle->cfg), configFilename)) {
|
||||
logmsg(LOG_ERR, "failed to read config file: %s:%d - %s\n",
|
||||
config_error_file(&(configHandle->cfg)), config_error_line(&(configHandle->cfg)),
|
||||
config_error_text(&(configHandle->cfg)));
|
||||
config_destroy(&(configHandle->cfg));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void deinitConfig(t_configHandle *configHandle) {
|
||||
config_destroy(&(configHandle->cfg));
|
||||
}
|
||||
|
||||
// When you got a result here, remember to free it using freeDevice
|
||||
int findDevice(t_commonHandle *handle, char *deviceId) {
|
||||
@ -154,9 +128,7 @@ void freeDevice(t_commonHandle *handle) {
|
||||
}
|
||||
}
|
||||
|
||||
int initReceiver(t_configHandle *configHandle, t_commonHandle *handle) {
|
||||
handle->configHandle = configHandle;
|
||||
|
||||
int initReceiver(t_commonHandle *handle) {
|
||||
struct sockaddr_in servaddr;
|
||||
|
||||
handle->receiveSockFd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
@ -166,11 +138,6 @@ int initReceiver(t_configHandle *configHandle, t_commonHandle *handle) {
|
||||
}
|
||||
|
||||
int receivePort = 20169;
|
||||
config_lookup_int(&(configHandle->cfg), "receivePort", &receivePort);
|
||||
if (receivePort < 1 || receivePort > 65535) {
|
||||
logmsg(LOG_ERR, "illegal receive port configured");
|
||||
return -2;
|
||||
}
|
||||
|
||||
memset(&servaddr, 0, sizeof(servaddr));
|
||||
servaddr.sin_family = AF_INET;
|
||||
@ -231,22 +198,13 @@ int receiveAndVerifyMinuteBuffer(t_commonHandle *handle, t_minuteBuffer *buf) {
|
||||
}
|
||||
|
||||
|
||||
int initForwarder(t_configHandle *configHandle, t_commonHandle *handle) {
|
||||
handle->configHandle = configHandle;
|
||||
|
||||
handle->postgresqlConnInfo = NULL;
|
||||
config_lookup_string(&(configHandle->cfg), "postgresqlConnInfo", &(handle->postgresqlConnInfo));
|
||||
if (! handle->postgresqlConnInfo) {
|
||||
logmsg(LOG_ERR, "no postgresql connInfo configured");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int initForwarder(t_commonHandle *handle) {
|
||||
handle->conn = NULL;
|
||||
|
||||
handle->lowerBound = 45000;
|
||||
config_lookup_int(&(configHandle->cfg), "lowerBound", &(handle->lowerBound));
|
||||
handle->upperBound = 55000;
|
||||
config_lookup_int(&(configHandle->cfg), "upperBound", &(handle->upperBound));
|
||||
char *lowerBoundStr = getenv("LOWER_BOUND");
|
||||
handle->lowerBound = lowerBoundStr ? strtol(lowerBoundStr, NULL, 10) : 45000;
|
||||
char *upperBoundStr = getenv("UPPER_BOUND");
|
||||
handle->upperBound = upperBoundStr ? strtol(upperBoundStr, NULL, 10) : 55000;
|
||||
logmsg(LOG_INFO, "lowerBound: %u, upperBound: %u", handle->lowerBound, handle->upperBound);
|
||||
|
||||
return 0;
|
||||
@ -357,21 +315,16 @@ void usage() {
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
t_configHandle configHandle;
|
||||
t_commonHandle commonHandle;
|
||||
commonHandle.foundDevice.deviceResult = NULL;
|
||||
|
||||
|
||||
const char *configFilename = DEFAULT_CONFIG_FILENAME;
|
||||
const char *dropPrivilegesToUser = NULL;
|
||||
bool doFork = false;
|
||||
|
||||
int c;
|
||||
while ((c = getopt(argc, argv, "f:vds:hn:b")) != -1) {
|
||||
while ((c = getopt(argc, argv, "vds:hn:b")) != -1) {
|
||||
switch (c) {
|
||||
case 'f':
|
||||
configFilename = strdup(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
verbose = true;
|
||||
break;
|
||||
@ -410,11 +363,6 @@ int main(int argc, char **argv) {
|
||||
|
||||
logmsg(LOG_INFO, "Version: " VERSION);
|
||||
|
||||
if (0 != initConfig(configFilename, &configHandle)) {
|
||||
logmsg(LOG_ERR, "error when reading configuration");
|
||||
exit(3);
|
||||
}
|
||||
|
||||
if (doFork) {
|
||||
int pid = fork();
|
||||
if (pid == -1) {
|
||||
@ -427,12 +375,12 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
}
|
||||
|
||||
if (0 != initReceiver(&configHandle, &commonHandle)) {
|
||||
if (0 != initReceiver(&commonHandle)) {
|
||||
logmsg(LOG_ERR, "error when initializing receiver");
|
||||
exit(5);
|
||||
}
|
||||
|
||||
if (0 != initForwarder(&configHandle, &commonHandle)) {
|
||||
if (0 != initForwarder(&commonHandle)) {
|
||||
logmsg(LOG_ERR, "error when initializing forwarder");
|
||||
exit(6);
|
||||
}
|
||||
@ -458,5 +406,4 @@ int main(int argc, char **argv) {
|
||||
|
||||
deinitForwarder(&commonHandle);
|
||||
deinitReceiver(&commonHandle);
|
||||
deinitConfig(&configHandle);
|
||||
}
|
||||
|
@ -1,7 +0,0 @@
|
||||
postgresqlConnInfo = "host=172.16.3.32 dbname=mainscnt user=sink password=test123";
|
||||
|
||||
lowerBound = 45000;
|
||||
upperBound = 55000;
|
||||
|
||||
receivePort = 20169;
|
||||
|
Reference in New Issue
Block a user