support json schema
This commit is contained in:
66
main.go
66
main.go
@@ -2,25 +2,24 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/app"
|
||||
grpcopts "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/grpc/opts"
|
||||
httpopts "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/http/opts"
|
||||
"golang.org/x/sys/unix"
|
||||
|
||||
weatherpb "gitea.libretechconsulting.com/rmcguire/ambient-local-exporter/api/v1alpha1/weather"
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-local-exporter/pkg/ambient"
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-local-exporter/pkg/ambient/ambienthttp"
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-local-exporter/pkg/ambient/config"
|
||||
weathergrpc "gitea.libretechconsulting.com/rmcguire/ambient-local-exporter/pkg/weather/grpc"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultMetricPrefix = "weather"
|
||||
)
|
||||
|
||||
var schema bool
|
||||
|
||||
func main() {
|
||||
ctx, cncl := signal.NotifyContext(context.Background(), os.Kill, os.Interrupt, unix.SIGTERM)
|
||||
defer cncl()
|
||||
@@ -36,6 +35,12 @@ func main() {
|
||||
// and set up logging, tracing, etc..
|
||||
aw := ambient.New(ctx, awConfig).Init()
|
||||
|
||||
// Just show schema if that's all we were asked to do
|
||||
if schema {
|
||||
printSchema(awConfig)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// Load http and grpc routes, prepare the app
|
||||
awApp := prepareApp(ctx, aw)
|
||||
|
||||
@@ -44,49 +49,16 @@ func main() {
|
||||
<-awApp.Done()
|
||||
}
|
||||
|
||||
func prepareApp(ctx context.Context, aw *ambient.AmbientWeather) *app.App {
|
||||
// Load ambient routes into app
|
||||
awApp := &app.App{
|
||||
AppContext: ctx,
|
||||
// flag.Parse will be called by go-app
|
||||
func init() {
|
||||
flag.BoolVar(&schema, "schema", false, "generate json schema and exit")
|
||||
}
|
||||
|
||||
// HTTP Endpoints for Ambient Weather Stations
|
||||
HTTP: &httpopts.AppHTTP{
|
||||
Funcs: []httpopts.HTTPFunc{
|
||||
{
|
||||
Path: "/weatherstation/updateweatherstation.php",
|
||||
HandlerFunc: aw.GetWundergroundHandlerFunc(ctx),
|
||||
},
|
||||
{
|
||||
Path: "/data/report",
|
||||
HandlerFunc: aw.GetAWNHandlerFunc(ctx),
|
||||
},
|
||||
},
|
||||
|
||||
// HTTP Listener that fixes broken requests generated by
|
||||
// some versions of awn firmware
|
||||
CustomListener: ambienthttp.NewAWNMutatingListener(ctx,
|
||||
aw.Config.HTTP.Listen), // Necessary to fix certain bad AWN firmware
|
||||
|
||||
// Health check funcs
|
||||
HealthChecks: []httpopts.HealthCheckFunc{
|
||||
// TODO: Implement
|
||||
func(ctx context.Context) error {
|
||||
return nil
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
// GRPC Service for retrieving weather
|
||||
GRPC: &grpcopts.AppGRPC{
|
||||
Services: []*grpcopts.GRPCService{
|
||||
{
|
||||
Name: "Weather Service",
|
||||
Type: &weatherpb.AmbientLocalWeatherService_ServiceDesc,
|
||||
Service: weathergrpc.NewGRPCWeather(ctx, aw.GetRecorder()),
|
||||
},
|
||||
},
|
||||
},
|
||||
func printSchema(config *config.AmbientLocalExporterConfig) {
|
||||
bytes, err := app.CustomSchema(config)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return awApp
|
||||
fmt.Println(string(bytes))
|
||||
}
|
||||
|
Reference in New Issue
Block a user