mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-08-07 07:14:50 +00:00
8c7d4a76ec
* Update agent.pb.go to include a new field "Provider" in the AlgoRequest struct. Signed-off-by: SammyOina <sammyoina@gmail.com> * fix build Signed-off-by: SammyOina <sammyoina@gmail.com> * Fix undeclared consumer error in agent service The commit fixes an error in the agent service where an undeclared consumer was requesting results in the computation manifest. The error is resolved by adding an error message for the undeclared consumer case. Signed-off-by: SammyOina <sammyoina@gmail.com> --------- Signed-off-by: SammyOina <sammyoina@gmail.com>
115 lines
3.3 KiB
Go
115 lines
3.3 KiB
Go
// Copyright (c) Ultraviolet
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
mflog "github.com/mainflux/mainflux/logger"
|
|
"github.com/mainflux/mainflux/pkg/uuid"
|
|
"github.com/ultravioletrs/cocos-ai/agent"
|
|
"github.com/ultravioletrs/cocos-ai/agent/api"
|
|
agentgrpc "github.com/ultravioletrs/cocos-ai/agent/api/grpc"
|
|
"github.com/ultravioletrs/cocos-ai/agent/tracing"
|
|
"github.com/ultravioletrs/cocos-ai/internal"
|
|
"github.com/ultravioletrs/cocos-ai/internal/env"
|
|
jaegerclient "github.com/ultravioletrs/cocos-ai/internal/jaeger"
|
|
"github.com/ultravioletrs/cocos-ai/internal/server"
|
|
grpcserver "github.com/ultravioletrs/cocos-ai/internal/server/grpc"
|
|
"go.opentelemetry.io/otel/trace"
|
|
"golang.org/x/sync/errgroup"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/reflection"
|
|
)
|
|
|
|
const (
|
|
svcName = "agent"
|
|
envPrefixHTTP = "AGENT_HTTP_"
|
|
envPrefixGRPC = "AGENT_GRPC_"
|
|
defSvcHTTPPort = "9031"
|
|
defSvcGRPCPort = "7002"
|
|
)
|
|
|
|
type config struct {
|
|
LogLevel string `env:"AGENT_LOG_LEVEL" envDefault:"info"`
|
|
JaegerURL string `env:"AGENT_JAEGER_URL" envDefault:"http://localhost::4318/v1/traces"`
|
|
InstanceID string `env:"AGENT_INSTANCE_ID" envDefault:""`
|
|
}
|
|
|
|
func main() {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
g, ctx := errgroup.WithContext(ctx)
|
|
|
|
var cfg config
|
|
if err := env.Parse(&cfg); err != nil {
|
|
log.Fatalf("failed to load %s configuration : %s", svcName, err)
|
|
}
|
|
|
|
logger, err := mflog.New(os.Stdout, cfg.LogLevel)
|
|
if err != nil {
|
|
log.Fatalf(err.Error())
|
|
}
|
|
|
|
if cfg.InstanceID == "" {
|
|
cfg.InstanceID, err = uuid.New().ID()
|
|
if err != nil {
|
|
log.Fatalf("Failed to generate instanceID: %s", err)
|
|
}
|
|
}
|
|
|
|
tp, err := jaegerclient.NewProvider(ctx, svcName, cfg.JaegerURL, cfg.InstanceID)
|
|
if err != nil {
|
|
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
|
|
}
|
|
defer func() {
|
|
if err := tp.Shutdown(ctx); err != nil {
|
|
logger.Error(fmt.Sprintf("Error shutting down tracer provider: %v", err))
|
|
}
|
|
}()
|
|
tracer := tp.Tracer(svcName)
|
|
|
|
svc := newService(logger, tracer)
|
|
|
|
httpServerConfig := server.Config{Port: defSvcHTTPPort}
|
|
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
|
|
logger.Fatal(fmt.Sprintf("failed to load %s gRPC server configuration : %s", svcName, err))
|
|
}
|
|
|
|
grpcServerConfig := server.Config{Port: defSvcGRPCPort}
|
|
if err := env.Parse(&grpcServerConfig, env.Options{Prefix: envPrefixGRPC}); err != nil {
|
|
log.Printf("failed to load %s gRPC server configuration : %s", svcName, err.Error())
|
|
return
|
|
}
|
|
registerAgentServiceServer := func(srv *grpc.Server) {
|
|
reflection.Register(srv)
|
|
agent.RegisterAgentServiceServer(srv, agentgrpc.NewServer(svc))
|
|
}
|
|
gs := grpcserver.New(ctx, cancel, svcName, grpcServerConfig, registerAgentServiceServer, logger)
|
|
|
|
g.Go(func() error {
|
|
return gs.Start()
|
|
})
|
|
|
|
g.Go(func() error {
|
|
return server.StopHandler(ctx, cancel, logger, svcName, gs)
|
|
})
|
|
|
|
if err := g.Wait(); err != nil {
|
|
logger.Error(fmt.Sprintf("%s service terminated: %s", svcName, err))
|
|
}
|
|
}
|
|
|
|
func newService(logger mflog.Logger, tracer trace.Tracer) agent.Service {
|
|
svc := agent.New()
|
|
|
|
svc = api.LoggingMiddleware(svc, logger)
|
|
counter, latency := internal.MakeMetrics(svcName, "api")
|
|
svc = api.MetricsMiddleware(svc, counter, latency)
|
|
svc = tracing.New(svc, tracer)
|
|
|
|
return svc
|
|
}
|