fix:#56 added update for grpc

This commit is contained in:
Elmar Kresse
2024-10-06 20:11:03 +02:00
parent a12f9590f3
commit d8a7cc5387
10 changed files with 68 additions and 11 deletions

View File

@ -33,6 +33,8 @@ services:
- DATA_MANAGER_URL=htwkalender-data-manager
networks:
- "net"
depends_on:
- htwkalender-data-manager
htwkalender-frontend:
image: DOCKER_REGISTRY_REPO-frontend # DOCKER_REGISTRY_REPO will be replaced by CI

View File

@ -33,6 +33,8 @@ services:
- DATA_MANAGER_URL=htwkalender-data-manager
networks:
- "net"
depends_on:
- htwkalender-data-manager
htwkalender-frontend:
image: DOCKER_REGISTRY_REPO-frontend # DOCKER_REGISTRY_REPO will be replaced by CI

View File

@ -35,6 +35,8 @@ services:
target: dev # prod
environment:
- DATA_MANAGER_URL=htwkalender-data-manager
depends_on:
- htwkalender-data-manager
htwkalender-frontend:
build:

View File

@ -27,8 +27,10 @@ http {
include mime.types;
default_type application/octet-stream;
access_log /opt/bitnami/nginx/logs/proxy_access.log;
error_log /opt/bitnami/nginx/logs/proxy_error.log;
log_format anonymized '[$time_local] "$request" $status $body_bytes_sent "$http_referer"';
access_log /opt/bitnami/nginx/logs/proxy_access.log anonymized;
error_log /opt/bitnami/nginx/logs/proxy_error.log error;
sendfile on;
keepalive_timeout 180s;

View File

@ -59,8 +59,10 @@ http {
real_ip_header CF-Connecting-IP;
access_log /opt/bitnami/nginx/logs/proxy_access.log;
error_log /opt/bitnami/nginx/logs/proxy_error.log;
log_format anonymized '[$time_local] "$request" $status $body_bytes_sent "$http_referer"';
access_log /opt/bitnami/nginx/logs/proxy_access.log anonymized;
error_log /opt/bitnami/nginx/logs/proxy_error.log error;
sendfile on;
keepalive_timeout 180s;

View File

@ -60,8 +60,10 @@ http {
real_ip_header CF-Connecting-IP;
access_log /opt/bitnami/nginx/logs/proxy_access.log;
error_log /opt/bitnami/nginx/logs/proxy_error.log;
log_format anonymized '[$time_local] "$request" $status $body_bytes_sent "$http_referer"';
access_log /opt/bitnami/nginx/logs/proxy_access.log anonymized;
error_log /opt/bitnami/nginx/logs/proxy_error.log error;
sendfile on;
keepalive_timeout 180s;

View File

@ -10,6 +10,12 @@ events {
http {
include mime.types;
default_type application/octet-stream;
gzip on;
log_format anonymized '[$time_local] "$request" $status $body_bytes_sent "$http_referer"';
access_log /opt/bitnami/nginx/logs/proxy_access.log anonymized;
error_log /opt/bitnami/nginx/logs/proxy_error.log error;
map $request_method $ratelimit_key {
POST $binary_remote_addr;

View File

@ -2,8 +2,10 @@ package grpc
import (
"github.com/pocketbase/pocketbase"
"google.golang.org/grpc/keepalive"
"log"
"net"
"time"
"google.golang.org/grpc"
pb "htwkalender/common/genproto/modules"
@ -14,7 +16,20 @@ func StartGRPCServer(app *pocketbase.PocketBase) {
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
s := grpc.NewServer(
grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: 5 * time.Minute, // Idle timeout before closing connection
MaxConnectionAge: 30 * time.Minute, // Max time before connection is closed
MaxConnectionAgeGrace: 5 * time.Minute, // Allow grace period before closing
Time: 2 * time.Minute, // Ping the client every 2 minutes
Timeout: 20 * time.Second, // Wait 20 seconds for ping ack
}),
grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
MinTime: 1 * time.Minute, // Minimum time between pings from clients
PermitWithoutStream: true, // Don't allow pings when there are no active RPCs
}),
grpc.MaxConcurrentStreams(0),
)
pb.RegisterModuleServiceServer(s, &ModuleServiceHandler{
app: app,

View File

@ -39,8 +39,15 @@ func main() {
}
grpcClient := grpc.ConnectGRPCServer(host)
// Close the grpc connection when the main function ends
defer grpc.CloseGRPCServer(grpcClient)
// Log the grpc connection
// Test the connection to the grpc server
grpcClient.Connect()
slog.Info("GRPC connection state", "state", grpcClient.GetState())
// Initialize a new Fiber app
webdavRequestMethods := []string{"PROPFIND", "MKCOL", "COPY", "MOVE"}

View File

@ -19,14 +19,31 @@ package grpc
import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/keepalive"
"log/slog"
"sync"
"time"
)
var conn *grpc.ClientConn
var once sync.Once
func ConnectGRPCServer(host string) *grpc.ClientConn {
conn, err := grpc.NewClient(host+":50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
slog.Error("could not connect to grpc server", "error", err)
}
once.Do(func() {
var err error
conn, err = grpc.NewClient(
host+":50051",
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithKeepaliveParams(keepalive.ClientParameters{
Time: 2 * time.Minute,
Timeout: 20 * time.Second,
PermitWithoutStream: true,
}),
)
if err != nil {
slog.Error("could not connect to grpc server", "error", err)
}
})
return conn
}