Compare commits
3 Commits
6a7628a84e
...
2024.12
Author | SHA1 | Date | |
---|---|---|---|
0edce7bab9 | |||
d08c73a528 | |||
14edfaf0e9 |
@@ -5,7 +5,7 @@ name: default
|
||||
|
||||
steps:
|
||||
- name: test
|
||||
image: golang:1.20.5
|
||||
image: golang:1.23.4
|
||||
volumes:
|
||||
- name: deps
|
||||
path: /go
|
||||
@@ -31,6 +31,6 @@ steps:
|
||||
from_secret: harbor_password
|
||||
---
|
||||
kind: signature
|
||||
hmac: 004f812ff29a1e2546eeafbf449c36c901f69b5f2591f83152eebde7258453fd
|
||||
hmac: d92e5a575088ed17ad15dbf7bf34f79f1d6b61c09d8b05fc7aab58f94c011e01
|
||||
|
||||
...
|
||||
|
@@ -1,11 +1,11 @@
|
||||
FROM golang:1.20.5-alpine AS build
|
||||
FROM golang:1.23.4-alpine AS build
|
||||
RUN apk --no-cache add git
|
||||
|
||||
WORKDIR /go/src/github.com/abh/geoipapi
|
||||
ADD . /go/src/github.com/abh/geoipapi
|
||||
RUN go install -v ./...
|
||||
|
||||
FROM alpine:3.18
|
||||
FROM alpine:3.21
|
||||
USER root
|
||||
RUN apk --no-cache add ca-certificates
|
||||
RUN apk --no-cache upgrade
|
||||
|
29
geoipapi.go
29
geoipapi.go
@@ -15,11 +15,13 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/oschwald/geoip2-golang"
|
||||
"go.ntppool.org/common/logger"
|
||||
"go.ntppool.org/common/tracing"
|
||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
|
||||
"go.ntppool.org/common/logger"
|
||||
"go.ntppool.org/common/tracing"
|
||||
"go.ntppool.org/common/version"
|
||||
)
|
||||
|
||||
type geoType uint8
|
||||
@@ -86,12 +88,24 @@ func setupHTTP(ctx context.Context) error {
|
||||
mux.HandleFunc("/api/json", handleJSON)
|
||||
mux.HandleFunc("/healthz", handleHealth)
|
||||
|
||||
versionHandler := func(next http.Handler) http.Handler {
|
||||
vinfo := version.VersionInfo()
|
||||
v := "geoipapi/" + vinfo.Version + "+" + vinfo.GitRevShort
|
||||
return http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Server", v)
|
||||
span := trace.SpanFromContext(r.Context())
|
||||
w.Header().Set("Traceparent", span.SpanContext().TraceID().String())
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
|
||||
srv := &http.Server{
|
||||
Addr: ":8009",
|
||||
BaseContext: func(_ net.Listener) context.Context { return ctx },
|
||||
ReadTimeout: time.Second,
|
||||
WriteTimeout: 10 * time.Second,
|
||||
Handler: otelhttp.NewHandler(mux, "geoipapi"),
|
||||
Handler: otelhttp.NewHandler(versionHandler(mux), "geoipapi"),
|
||||
}
|
||||
srvErr := make(chan error, 1)
|
||||
go func() {
|
||||
@@ -134,6 +148,8 @@ func getCity(req *http.Request) (*geoip2.City, error) {
|
||||
}
|
||||
|
||||
func handleJSON(w http.ResponseWriter, req *http.Request) {
|
||||
span := trace.SpanFromContext(req.Context())
|
||||
span.SetName("/api/json")
|
||||
city, err := getCity(req)
|
||||
if err != nil {
|
||||
log.Printf("getCity error: %s", err)
|
||||
@@ -152,6 +168,9 @@ func handleJSON(w http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
|
||||
func handleCountry(w http.ResponseWriter, req *http.Request) {
|
||||
span := trace.SpanFromContext(req.Context())
|
||||
span.SetName("/api/country")
|
||||
|
||||
city, err := getCity(req)
|
||||
if err != nil {
|
||||
log.Printf("getCity error: %s", err)
|
||||
@@ -164,6 +183,10 @@ func handleCountry(w http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
|
||||
func handleHealth(w http.ResponseWriter, req *http.Request) {
|
||||
span := trace.SpanFromContext(req.Context())
|
||||
span.SetAttributes(attribute.Bool("app.drop_sample", true))
|
||||
span.SetName("/healthz")
|
||||
|
||||
ip := net.ParseIP("199.43.0.43")
|
||||
city, err := getCityIP(ip)
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user