Start Ambient local exporter
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -21,3 +21,4 @@ | |||||||
| # Go workspace file | # Go workspace file | ||||||
| go.work | go.work | ||||||
|  |  | ||||||
|  | .env | ||||||
|   | |||||||
							
								
								
									
										51
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | module gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter | ||||||
|  |  | ||||||
|  | go 1.23.4 | ||||||
|  |  | ||||||
|  | require ( | ||||||
|  | 	gitea.libretechconsulting.com/rmcguire/go-app v0.1.0 | ||||||
|  | 	github.com/gorilla/schema v1.4.1 | ||||||
|  | 	github.com/rs/zerolog v1.33.0 | ||||||
|  | 	golang.org/x/sys v0.29.0 | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | require ( | ||||||
|  | 	github.com/beorn7/perks v1.0.1 // indirect | ||||||
|  | 	github.com/caarlos0/env/v9 v9.0.0 // indirect | ||||||
|  | 	github.com/cenkalti/backoff/v4 v4.3.0 // indirect | ||||||
|  | 	github.com/cespare/xxhash/v2 v2.3.0 // indirect | ||||||
|  | 	github.com/felixge/httpsnoop v1.0.4 // indirect | ||||||
|  | 	github.com/go-logr/logr v1.4.2 // indirect | ||||||
|  | 	github.com/go-logr/stdr v1.2.2 // indirect | ||||||
|  | 	github.com/google/uuid v1.6.0 // indirect | ||||||
|  | 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 // indirect | ||||||
|  | 	github.com/klauspost/compress v1.17.11 // indirect | ||||||
|  | 	github.com/mattn/go-colorable v0.1.13 // indirect | ||||||
|  | 	github.com/mattn/go-isatty v0.0.20 // indirect | ||||||
|  | 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect | ||||||
|  | 	github.com/prometheus/client_golang v1.20.5 // indirect | ||||||
|  | 	github.com/prometheus/client_model v0.6.1 // indirect | ||||||
|  | 	github.com/prometheus/common v0.61.0 // indirect | ||||||
|  | 	github.com/prometheus/procfs v0.15.1 // indirect | ||||||
|  | 	go.opentelemetry.io/auto/sdk v1.1.0 // indirect | ||||||
|  | 	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/exporters/prometheus v0.55.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/metric v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/sdk v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/sdk/metric v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/otel/trace v1.33.0 // indirect | ||||||
|  | 	go.opentelemetry.io/proto/otlp v1.4.0 // indirect | ||||||
|  | 	golang.org/x/net v0.33.0 // indirect | ||||||
|  | 	golang.org/x/text v0.21.0 // indirect | ||||||
|  | 	google.golang.org/genproto/googleapis/api v0.0.0-20250102185135-69823020774d // indirect | ||||||
|  | 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d // indirect | ||||||
|  | 	google.golang.org/grpc v1.69.2 // indirect | ||||||
|  | 	google.golang.org/protobuf v1.36.1 // indirect | ||||||
|  | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
|  | ) | ||||||
							
								
								
									
										117
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | |||||||
|  | gitea.libretechconsulting.com/rmcguire/go-app v0.1.0 h1:H4TMgQ463oRNOyoi0FAvfGtOoDn651zNZStxM+sdNuU= | ||||||
|  | gitea.libretechconsulting.com/rmcguire/go-app v0.1.0/go.mod h1:p0ajkpFvzzD6VZ4xSjuowtwGRb1DjMfo/iG6LyFqFCs= | ||||||
|  | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | ||||||
|  | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= | ||||||
|  | github.com/caarlos0/env/v9 v9.0.0 h1:SI6JNsOA+y5gj9njpgybykATIylrRMklbs5ch6wO6pc= | ||||||
|  | github.com/caarlos0/env/v9 v9.0.0/go.mod h1:ye5mlCVMYh6tZ+vCgrs/B95sj88cg5Tlnc0XIzgZ020= | ||||||
|  | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= | ||||||
|  | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= | ||||||
|  | github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= | ||||||
|  | github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||||||
|  | github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= | ||||||
|  | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||||
|  | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
|  | github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= | ||||||
|  | github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= | ||||||
|  | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||||
|  | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= | ||||||
|  | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
|  | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= | ||||||
|  | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= | ||||||
|  | github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= | ||||||
|  | github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= | ||||||
|  | github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= | ||||||
|  | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
|  | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
|  | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= | ||||||
|  | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||||
|  | github.com/gorilla/schema v1.4.1 h1:jUg5hUjCSDZpNGLuXQOgIWGdlgrIdYvgQ0wZtdK1M3E= | ||||||
|  | github.com/gorilla/schema v1.4.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= | ||||||
|  | github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg= | ||||||
|  | github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1/go.mod h1:RBRO7fro65R6tjKzYgLAFo0t1QEXY1Dp+i/bvpRiqiQ= | ||||||
|  | github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= | ||||||
|  | github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= | ||||||
|  | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
|  | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
|  | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||||||
|  | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= | ||||||
|  | github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= | ||||||
|  | github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= | ||||||
|  | github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= | ||||||
|  | github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= | ||||||
|  | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= | ||||||
|  | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||||||
|  | github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= | ||||||
|  | github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||||||
|  | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= | ||||||
|  | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||||
|  | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
|  | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||||
|  | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||||
|  | github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= | ||||||
|  | github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= | ||||||
|  | github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= | ||||||
|  | github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= | ||||||
|  | github.com/prometheus/common v0.61.0 h1:3gv/GThfX0cV2lpO7gkTUwZru38mxevy90Bj8YFSRQQ= | ||||||
|  | github.com/prometheus/common v0.61.0/go.mod h1:zr29OCN/2BsJRaFwG8QOBr41D6kkchKbpeNH7pAjb/s= | ||||||
|  | github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= | ||||||
|  | github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= | ||||||
|  | github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= | ||||||
|  | github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= | ||||||
|  | github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= | ||||||
|  | github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= | ||||||
|  | github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= | ||||||
|  | github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= | ||||||
|  | github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||||||
|  | go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= | ||||||
|  | go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= | ||||||
|  | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= | ||||||
|  | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= | ||||||
|  | go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw= | ||||||
|  | go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I= | ||||||
|  | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.33.0 h1:7F29RDmnlqk6B5d+sUqemt8TBfDqxryYW5gX6L74RFA= | ||||||
|  | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.33.0/go.mod h1:ZiGDq7xwDMKmWDrN1XsXAj0iC7hns+2DhxBFSncNHSE= | ||||||
|  | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA= | ||||||
|  | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI= | ||||||
|  | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 h1:5pojmb1U1AogINhN3SurB+zm/nIcusopeBNp42f45QM= | ||||||
|  | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0/go.mod h1:57gTHJSE5S1tqg+EKsLPlTWhpHMsWlVmer+LA926XiA= | ||||||
|  | go.opentelemetry.io/otel/exporters/prometheus v0.55.0 h1:sSPw658Lk2NWAv74lkD3B/RSDb+xRFx46GjkrL3VUZo= | ||||||
|  | go.opentelemetry.io/otel/exporters/prometheus v0.55.0/go.mod h1:nC00vyCmQixoeaxF6KNyP42II/RHa9UdruK02qBmHvI= | ||||||
|  | go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.33.0 h1:FiOTYABOX4tdzi8A0+mtzcsTmi6WBOxk66u0f1Mj9Gs= | ||||||
|  | go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.33.0/go.mod h1:xyo5rS8DgzV0Jtsht+LCEMwyiDbjpsxBpWETwFRF0/4= | ||||||
|  | go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.33.0 h1:W5AWUn/IVe8RFb5pZx1Uh9Laf/4+Qmm4kJL5zPuvR+0= | ||||||
|  | go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.33.0/go.mod h1:mzKxJywMNBdEX8TSJais3NnsVZUaJ+bAy6UxPTng2vk= | ||||||
|  | go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ= | ||||||
|  | go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M= | ||||||
|  | go.opentelemetry.io/otel/sdk v1.33.0 h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM= | ||||||
|  | go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM= | ||||||
|  | go.opentelemetry.io/otel/sdk/metric v1.33.0 h1:Gs5VK9/WUJhNXZgn8MR6ITatvAmKeIuCtNbsP3JkNqU= | ||||||
|  | go.opentelemetry.io/otel/sdk/metric v1.33.0/go.mod h1:dL5ykHZmm1B1nVRk9dDjChwDmt81MjVp3gLkQRwKf/Q= | ||||||
|  | go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s= | ||||||
|  | go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck= | ||||||
|  | go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg= | ||||||
|  | go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY= | ||||||
|  | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= | ||||||
|  | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= | ||||||
|  | golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= | ||||||
|  | golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= | ||||||
|  | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= | ||||||
|  | golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||||
|  | golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= | ||||||
|  | golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= | ||||||
|  | google.golang.org/genproto/googleapis/api v0.0.0-20250102185135-69823020774d h1:H8tOf8XM88HvKqLTxe755haY6r1fqqzLbEnfrmLXlSA= | ||||||
|  | google.golang.org/genproto/googleapis/api v0.0.0-20250102185135-69823020774d/go.mod h1:2v7Z7gP2ZUOGsaFyxATQSRoBnKygqVq2Cwnvom7QiqY= | ||||||
|  | google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d h1:xJJRGY7TJcvIlpSrN3K6LAWgNFUILlO+OMAqtg9aqnw= | ||||||
|  | google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d/go.mod h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4= | ||||||
|  | google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= | ||||||
|  | google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= | ||||||
|  | google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= | ||||||
|  | google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= | ||||||
|  | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
|  | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
|  | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
|  | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
|  | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
							
								
								
									
										46
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | package main | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"os" | ||||||
|  | 	"os/signal" | ||||||
|  |  | ||||||
|  | 	"gitea.libretechconsulting.com/rmcguire/go-app/pkg/app" | ||||||
|  | 	"gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv" | ||||||
|  | 	"golang.org/x/sys/unix" | ||||||
|  |  | ||||||
|  | 	"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/ambient" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func main() { | ||||||
|  | 	ctx, cncl := signal.NotifyContext(context.Background(), os.Kill, unix.SIGTERM) | ||||||
|  | 	defer cncl() | ||||||
|  |  | ||||||
|  | 	ctx = app.MustSetupConfigAndLogging(ctx) | ||||||
|  |  | ||||||
|  | 	awApp := app.App{ | ||||||
|  | 		AppContext: ctx, | ||||||
|  | 		HTTP: &app.AppHTTP{ | ||||||
|  | 			Funcs: []srv.HTTPFunc{ | ||||||
|  | 				{ | ||||||
|  | 					Path:        "/weatherstation/updateweatherstation.php", | ||||||
|  | 					HandlerFunc: ambient.GetWundergroundHandlerFunc(ctx), | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					Path:        "/data/report", | ||||||
|  | 					HandlerFunc: ambient.GetAWNHandlerFunc(ctx), | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			HealthChecks: []srv.HealthCheckFunc{ | ||||||
|  | 				// TODO: Implement | ||||||
|  | 				func(ctx context.Context) error { | ||||||
|  | 					return nil | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	awApp.MustRun() | ||||||
|  |  | ||||||
|  | 	<-awApp.Done() | ||||||
|  | } | ||||||
							
								
								
									
										61
									
								
								pkg/ambient/http.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								pkg/ambient/http.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | package ambient | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"io" | ||||||
|  | 	"net/http" | ||||||
|  |  | ||||||
|  | 	"gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel" | ||||||
|  | 	"github.com/rs/zerolog" | ||||||
|  |  | ||||||
|  | 	"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/awn" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func GetAWNHandlerFunc(appCtx context.Context) func(http.ResponseWriter, *http.Request) { | ||||||
|  | 	l := zerolog.Ctx(appCtx) | ||||||
|  | 	tracer := otel.GetTracer(appCtx, "awn.http.handler") | ||||||
|  |  | ||||||
|  | 	return func(w http.ResponseWriter, r *http.Request) { | ||||||
|  | 		_, span := tracer.Start(r.Context(), "update") | ||||||
|  | 		defer span.End() | ||||||
|  |  | ||||||
|  | 		bodyBytes, err := io.ReadAll(r.Body) | ||||||
|  | 		if err != nil { | ||||||
|  | 			w.WriteHeader(http.StatusBadRequest) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		l.Trace().Bytes("body", bodyBytes) | ||||||
|  | 		l.Trace().Any("request", r.URL.Query()).Send() | ||||||
|  |  | ||||||
|  | 		update, err := awn.UnmarshalQueryParams(r.URL.Query()) | ||||||
|  | 		if err != nil { | ||||||
|  | 			l.Err(err).Send() | ||||||
|  | 			w.WriteHeader(http.StatusInternalServerError) | ||||||
|  | 			w.Write([]byte(err.Error())) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		l.Trace().Any("update", update).Send() | ||||||
|  |  | ||||||
|  | 		w.Write([]byte("ok")) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetWundergroundHandlerFunc(appCtx context.Context) func(http.ResponseWriter, *http.Request) { | ||||||
|  | 	l := zerolog.Ctx(appCtx) | ||||||
|  | 	tracer := otel.GetTracer(appCtx, "wunderground.http.handler") | ||||||
|  |  | ||||||
|  | 	return func(w http.ResponseWriter, r *http.Request) { | ||||||
|  | 		_, span := tracer.Start(r.Context(), "update") | ||||||
|  | 		defer span.End() | ||||||
|  |  | ||||||
|  | 		bodyBytes, err := io.ReadAll(r.Body) | ||||||
|  | 		if err != nil { | ||||||
|  | 			w.WriteHeader(http.StatusBadRequest) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		l.Trace().Bytes("body", bodyBytes) | ||||||
|  | 		l.Trace().Any("request", r.URL.Query()).Send() | ||||||
|  |  | ||||||
|  | 		w.Write([]byte("ok")) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										47
									
								
								pkg/awn/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								pkg/awn/types.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | package awn | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"net/url" | ||||||
|  |  | ||||||
|  | 	"github.com/gorilla/schema" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type AmbientWeatherUpdate struct { | ||||||
|  | 	PassKey        string  `json:"PASSKEY,omitempty"` | ||||||
|  | 	StationType    string  `json:"stationtype,omitempty"` | ||||||
|  | 	DateUTC        string  `json:"dateutc,omitempty"` | ||||||
|  | 	TempF          float32 `json:"tempf,omitempty"` | ||||||
|  | 	Humidity       int     `json:"humidity,omitempty"` | ||||||
|  | 	WindSpeedMPH   float32 `json:"windspeedmph,omitempty"` | ||||||
|  | 	WindGustMPH    float32 `json:"windgustmph,omitempty"` | ||||||
|  | 	MaxDailyGust   float32 `json:"maxdailygust,omitempty"` | ||||||
|  | 	WindDir        int     `json:"winddir,omitempty"` | ||||||
|  | 	WindDirAVG10m  int     `json:"winddir_avg10m,omitempty"` | ||||||
|  | 	UV             int     `json:"uv,omitempty"` | ||||||
|  | 	SolarRadiation float32 `json:"solarradiation,omitempty"` | ||||||
|  | 	HourlyRainIn   float32 `json:"hourlyrainin,omitempty"` | ||||||
|  | 	EventRainIn    float32 `json:"eventrainin,omitempty"` | ||||||
|  | 	DailyRainIn    float32 `json:"dailyrainin,omitempty"` | ||||||
|  | 	WeeklyRainIn   float32 `json:"weeklyrainin,omitempty"` | ||||||
|  | 	MonthlyRainIn  float32 `json:"monthlyrainin,omitempty"` | ||||||
|  | 	YearlyRainIn   float32 `json:"yearlyrainin,omitempty"` | ||||||
|  | 	TotalRainIn    float32 `json:"totalrainin,omitempty"` | ||||||
|  | 	BattOut        int     `json:"battout,omitempty"` | ||||||
|  | 	BattRain       int     `json:"battrain,omitempty"` | ||||||
|  | 	TempInF        float32 `json:"tempinf,omitempty"` | ||||||
|  | 	HumidityIn     int     `json:"humidityin,omitempty"` | ||||||
|  | 	BaromRelIn     float32 `json:"baromrelin,omitempty"` | ||||||
|  | 	BaromAbsIn     float32 `json:"baromabsin,omitempty"` | ||||||
|  | 	BattIn         int     `json:"battin,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func UnmarshalQueryParams(query url.Values) (*AmbientWeatherUpdate, error) { | ||||||
|  | 	update := new(AmbientWeatherUpdate) | ||||||
|  |  | ||||||
|  | 	decoder := schema.NewDecoder() | ||||||
|  | 	if err := decoder.Decode(update, query); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return update, nil | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user