Initial cloud-services repo - gateway service + pkg modules

This commit is contained in:
Chris Rai
2026-01-30 23:14:52 -05:00
commit fbb820d7b3
1037 changed files with 171318 additions and 0 deletions

55
pkg/kafka/admin.go Normal file
View File

@@ -0,0 +1,55 @@
package kafka
import (
"context"
"fmt"
"time"
"fiskerinc.com/modules/utils/envtool"
"github.com/confluentinc/confluent-kafka-go/v2/kafka"
"github.com/pkg/errors"
)
// AdminClient interface
type AdminClient interface {
CreateTopics(ctx context.Context, topics []kafka.TopicSpecification, options ...kafka.CreateTopicsAdminOption) ([]kafka.TopicResult, error)
}
// Global
var (
Admin AdminClient
kafkaHosts string = envtool.GetEnv("KAFKA_HOSTS", "localhost:9093")
)
func init() {
Admin, _ = kafka.NewAdminClient(&kafka.ConfigMap{"bootstrap.servers": kafkaHosts})
}
// EnsureTopicsExist checks Kafka for topic, if it doesn't exist it creates topic
func EnsureTopicsExist(topics []string) error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
s := fmt.Sprintf("%vs", envtool.GetEnvInt("KAFKA_TIMEOUT", 30))
maxDur, err := time.ParseDuration(s)
if err != nil {
return errors.WithStack(err)
}
ts := make([]kafka.TopicSpecification, len(topics))
for i, t := range topics {
ts[i] = kafka.TopicSpecification{
Topic: t,
NumPartitions: envtool.GetEnvInt("KAFKA_TOPIC_PARTITIONS", 1),
ReplicationFactor: envtool.GetEnvInt("KAFKA_TOPIC_REPLICATION_FACTOR", 1),
}
}
_, err = Admin.CreateTopics(ctx, ts, kafka.SetAdminOperationTimeout(maxDur))
if err != nil {
return errors.WithStack(err)
}
return nil
}