feat: logging
This commit is contained in:
parent
778d5ef146
commit
fe5e40162b
10 changed files with 151 additions and 75 deletions
|
|
@ -3,7 +3,7 @@ info:
|
||||||
title: Swagger GSN - OpenAPI 3.0
|
title: Swagger GSN - OpenAPI 3.0
|
||||||
version: 0.0.1
|
version: 0.0.1
|
||||||
paths:
|
paths:
|
||||||
/subscription:
|
/api/v1/subscription:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Subscriptions
|
- Subscriptions
|
||||||
|
|
@ -67,7 +67,7 @@ paths:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: "#/components/schemas/Error"
|
$ref: "#/components/schemas/Error"
|
||||||
/station:
|
/api/v1/station:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Stations
|
- Stations
|
||||||
|
|
@ -106,7 +106,7 @@ paths:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: "#/components/schemas/Error"
|
$ref: "#/components/schemas/Error"
|
||||||
/station/subscribe:
|
/api/v1/station/subscribe:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Stations
|
- Stations
|
||||||
|
|
@ -144,7 +144,7 @@ paths:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: "#/components/schemas/Error"
|
$ref: "#/components/schemas/Error"
|
||||||
/satellite:
|
/api/v1/satellite:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Satellites
|
- Satellites
|
||||||
|
|
@ -183,7 +183,7 @@ paths:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: "#/components/schemas/Error"
|
$ref: "#/components/schemas/Error"
|
||||||
/satellite/subscribe:
|
/api/v1/satellite/subscribe:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Satellites
|
- Satellites
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
|
|
||||||
"git.intra.yksa.space/gsn/gsn-proxy/internal/repository"
|
"git.intra.yksa.space/gsn/gsn-proxy/internal/repository"
|
||||||
"git.intra.yksa.space/gsn/gsn-proxy/internal/service"
|
"git.intra.yksa.space/gsn/gsn-proxy/internal/service"
|
||||||
"git.intra.yksa.space/gsn/gsn-proxy/internal/transport/rest"
|
"git.intra.yksa.space/gsn/gsn-proxy/internal/transport/rest"
|
||||||
"git.intra.yksa.space/gsn/gsn-proxy/internal/transport/rest/handler"
|
"git.intra.yksa.space/gsn/gsn-proxy/internal/transport/rest/handler"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -14,14 +13,19 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
lg, err := zap.NewProduction()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
repoConfig, err := repository.NewConfig(servicePrefix)
|
repoConfig, err := repository.NewConfig(servicePrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
lg.Fatal("failed to init repo config", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
repo, err := repository.New(repoConfig)
|
repo, err := repository.New(repoConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
lg.Fatal("failed to init repo", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := service.New(repo)
|
svc := service.New(repo)
|
||||||
|
|
@ -30,19 +34,19 @@ func main() {
|
||||||
|
|
||||||
restConfig, err := rest.NewConfig(servicePrefix)
|
restConfig, err := rest.NewConfig(servicePrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
lg.Fatal("failed to init transport config", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
transport, err := rest.New(handler, restConfig)
|
transport, err := rest.New(lg, handler, restConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
lg.Fatal("failed to init transport", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
transport.Run()
|
transport.Run()
|
||||||
|
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
log.Println("panic occured: ", r)
|
lg.Warn("panic occured", zap.Any("recover", r))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
23
internal/pkg/log/log.go
Normal file
23
internal/pkg/log/log.go
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ctxLogKey struct{}
|
||||||
|
|
||||||
|
func ToCtx(ctx context.Context, lg *zap.Logger) context.Context {
|
||||||
|
return context.WithValue(ctx, ctxLogKey{}, lg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Ctx(ctx context.Context) *zap.Logger {
|
||||||
|
lg, ok := ctx.Value(ctxLogKey{}).(*zap.Logger)
|
||||||
|
if !ok || lg == nil {
|
||||||
|
zap.L().Error("no logger in context, using global")
|
||||||
|
return zap.L()
|
||||||
|
}
|
||||||
|
|
||||||
|
return lg
|
||||||
|
}
|
||||||
44
internal/transport/middleware/log.go
Normal file
44
internal/transport/middleware/log.go
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.intra.yksa.space/gsn/gsn-proxy/internal/pkg/errcodes"
|
||||||
|
"git.intra.yksa.space/gsn/gsn-proxy/internal/pkg/log"
|
||||||
|
"github.com/ogen-go/ogen/middleware"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Logging(logger *zap.Logger) middleware.Middleware {
|
||||||
|
return func(req middleware.Request, next func(req middleware.Request) (middleware.Response, error)) (middleware.Response, error) {
|
||||||
|
lg := logger.With(
|
||||||
|
zap.String("operationId", req.OperationID),
|
||||||
|
)
|
||||||
|
|
||||||
|
lg.Info("started request")
|
||||||
|
|
||||||
|
req.Context = log.ToCtx(req.Context, lg)
|
||||||
|
|
||||||
|
start := time.Now()
|
||||||
|
resp, err := next(req)
|
||||||
|
dur := time.Since(start).Microseconds()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if errcode, ok := err.(*errcodes.ErrorCode); ok {
|
||||||
|
lg.Error("request error",
|
||||||
|
zap.Int("status_code", errcode.StatusCode),
|
||||||
|
zap.String("message", errcode.Message),
|
||||||
|
zap.String("details", errcode.Details),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
lg.Error("request internal error",
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lg.Info("done request", zap.Float64("duration_ms", float64(dur)/float64(1000)))
|
||||||
|
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,32 +2,37 @@ package rest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"git.intra.yksa.space/gsn/gsn-proxy/internal/transport/middleware"
|
||||||
handler "git.intra.yksa.space/gsn/gsn-proxy/internal/transport/rest/handler"
|
handler "git.intra.yksa.space/gsn/gsn-proxy/internal/transport/rest/handler"
|
||||||
api "git.intra.yksa.space/gsn/gsn-proxy/pkg/rest"
|
api "git.intra.yksa.space/gsn/gsn-proxy/pkg/rest"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Transport struct {
|
type Transport struct {
|
||||||
|
lg *zap.Logger
|
||||||
cfg *Config
|
cfg *Config
|
||||||
srv *api.Server
|
srv *api.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(handler *handler.Handler, cfg *Config) (*Transport, error) {
|
func New(lg *zap.Logger, handler *handler.Handler, cfg *Config) (*Transport, error) {
|
||||||
srv, err := api.NewServer(handler)
|
srv, err := api.NewServer(handler, api.WithMiddleware(middleware.Logging(lg)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Transport{
|
return &Transport{
|
||||||
|
lg: lg,
|
||||||
srv: srv,
|
srv: srv,
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) Run() {
|
func (t *Transport) Run() {
|
||||||
|
t.lg.Info("started")
|
||||||
|
|
||||||
if err := http.ListenAndServe(fmt.Sprintf(":%d", t.cfg.Port), t.srv); err != nil {
|
if err := http.ListenAndServe(fmt.Sprintf(":%d", t.cfg.Port), t.srv); err != nil {
|
||||||
log.Panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,37 +32,37 @@ type Invoker interface {
|
||||||
//
|
//
|
||||||
// Get available satellites.
|
// Get available satellites.
|
||||||
//
|
//
|
||||||
// GET /satellite
|
// GET /api/v1/satellite
|
||||||
GetSatellites(ctx context.Context) (*GetSatellitesOK, error)
|
GetSatellites(ctx context.Context) (*GetSatellitesOK, error)
|
||||||
// GetStations invokes GetStations operation.
|
// GetStations invokes GetStations operation.
|
||||||
//
|
//
|
||||||
// Get available stations.
|
// Get available stations.
|
||||||
//
|
//
|
||||||
// GET /station
|
// GET /api/v1/station
|
||||||
GetStations(ctx context.Context) (*GetStationsOK, error)
|
GetStations(ctx context.Context) (*GetStationsOK, error)
|
||||||
// GetSubscriptions invokes GetSubscriptions operation.
|
// GetSubscriptions invokes GetSubscriptions operation.
|
||||||
//
|
//
|
||||||
// Get current subscriptions.
|
// Get current subscriptions.
|
||||||
//
|
//
|
||||||
// GET /subscription
|
// GET /api/v1/subscription
|
||||||
GetSubscriptions(ctx context.Context) (*GetSubscriptionsOK, error)
|
GetSubscriptions(ctx context.Context) (*GetSubscriptionsOK, error)
|
||||||
// SubscribeSatellite invokes SubscribeSatellite operation.
|
// SubscribeSatellite invokes SubscribeSatellite operation.
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /satellite/subscribe
|
// POST /api/v1/satellite/subscribe
|
||||||
SubscribeSatellite(ctx context.Context, request *SubscribeSatelliteReq) (*SubscribeSatelliteOK, error)
|
SubscribeSatellite(ctx context.Context, request *SubscribeSatelliteReq) (*SubscribeSatelliteOK, error)
|
||||||
// SubscribeStation invokes SubscribeStation operation.
|
// SubscribeStation invokes SubscribeStation operation.
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /station/subscribe
|
// POST /api/v1/station/subscribe
|
||||||
SubscribeStation(ctx context.Context, request *SubscribeStationReq) (*SubscribeStationOK, error)
|
SubscribeStation(ctx context.Context, request *SubscribeStationReq) (*SubscribeStationOK, error)
|
||||||
// Unsubscribe invokes Unsubscribe operation.
|
// Unsubscribe invokes Unsubscribe operation.
|
||||||
//
|
//
|
||||||
// Remove subscription by subscription ID.
|
// Remove subscription by subscription ID.
|
||||||
//
|
//
|
||||||
// DELETE /subscription
|
// DELETE /api/v1/subscription
|
||||||
Unsubscribe(ctx context.Context, params UnsubscribeParams) error
|
Unsubscribe(ctx context.Context, params UnsubscribeParams) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -117,7 +117,7 @@ func (c *Client) requestURL(ctx context.Context) *url.URL {
|
||||||
//
|
//
|
||||||
// Get available satellites.
|
// Get available satellites.
|
||||||
//
|
//
|
||||||
// GET /satellite
|
// GET /api/v1/satellite
|
||||||
func (c *Client) GetSatellites(ctx context.Context) (*GetSatellitesOK, error) {
|
func (c *Client) GetSatellites(ctx context.Context) (*GetSatellitesOK, error) {
|
||||||
res, err := c.sendGetSatellites(ctx)
|
res, err := c.sendGetSatellites(ctx)
|
||||||
return res, err
|
return res, err
|
||||||
|
|
@ -127,7 +127,7 @@ func (c *Client) sendGetSatellites(ctx context.Context) (res *GetSatellitesOK, e
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("GetSatellites"),
|
otelogen.OperationID("GetSatellites"),
|
||||||
semconv.HTTPRequestMethodKey.String("GET"),
|
semconv.HTTPRequestMethodKey.String("GET"),
|
||||||
semconv.HTTPRouteKey.String("/satellite"),
|
semconv.HTTPRouteKey.String("/api/v1/satellite"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run stopwatch.
|
// Run stopwatch.
|
||||||
|
|
@ -160,7 +160,7 @@ func (c *Client) sendGetSatellites(ctx context.Context) (res *GetSatellitesOK, e
|
||||||
stage = "BuildURL"
|
stage = "BuildURL"
|
||||||
u := uri.Clone(c.requestURL(ctx))
|
u := uri.Clone(c.requestURL(ctx))
|
||||||
var pathParts [1]string
|
var pathParts [1]string
|
||||||
pathParts[0] = "/satellite"
|
pathParts[0] = "/api/v1/satellite"
|
||||||
uri.AddPathParts(u, pathParts[:]...)
|
uri.AddPathParts(u, pathParts[:]...)
|
||||||
|
|
||||||
stage = "EncodeRequest"
|
stage = "EncodeRequest"
|
||||||
|
|
@ -189,7 +189,7 @@ func (c *Client) sendGetSatellites(ctx context.Context) (res *GetSatellitesOK, e
|
||||||
//
|
//
|
||||||
// Get available stations.
|
// Get available stations.
|
||||||
//
|
//
|
||||||
// GET /station
|
// GET /api/v1/station
|
||||||
func (c *Client) GetStations(ctx context.Context) (*GetStationsOK, error) {
|
func (c *Client) GetStations(ctx context.Context) (*GetStationsOK, error) {
|
||||||
res, err := c.sendGetStations(ctx)
|
res, err := c.sendGetStations(ctx)
|
||||||
return res, err
|
return res, err
|
||||||
|
|
@ -199,7 +199,7 @@ func (c *Client) sendGetStations(ctx context.Context) (res *GetStationsOK, err e
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("GetStations"),
|
otelogen.OperationID("GetStations"),
|
||||||
semconv.HTTPRequestMethodKey.String("GET"),
|
semconv.HTTPRequestMethodKey.String("GET"),
|
||||||
semconv.HTTPRouteKey.String("/station"),
|
semconv.HTTPRouteKey.String("/api/v1/station"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run stopwatch.
|
// Run stopwatch.
|
||||||
|
|
@ -232,7 +232,7 @@ func (c *Client) sendGetStations(ctx context.Context) (res *GetStationsOK, err e
|
||||||
stage = "BuildURL"
|
stage = "BuildURL"
|
||||||
u := uri.Clone(c.requestURL(ctx))
|
u := uri.Clone(c.requestURL(ctx))
|
||||||
var pathParts [1]string
|
var pathParts [1]string
|
||||||
pathParts[0] = "/station"
|
pathParts[0] = "/api/v1/station"
|
||||||
uri.AddPathParts(u, pathParts[:]...)
|
uri.AddPathParts(u, pathParts[:]...)
|
||||||
|
|
||||||
stage = "EncodeRequest"
|
stage = "EncodeRequest"
|
||||||
|
|
@ -261,7 +261,7 @@ func (c *Client) sendGetStations(ctx context.Context) (res *GetStationsOK, err e
|
||||||
//
|
//
|
||||||
// Get current subscriptions.
|
// Get current subscriptions.
|
||||||
//
|
//
|
||||||
// GET /subscription
|
// GET /api/v1/subscription
|
||||||
func (c *Client) GetSubscriptions(ctx context.Context) (*GetSubscriptionsOK, error) {
|
func (c *Client) GetSubscriptions(ctx context.Context) (*GetSubscriptionsOK, error) {
|
||||||
res, err := c.sendGetSubscriptions(ctx)
|
res, err := c.sendGetSubscriptions(ctx)
|
||||||
return res, err
|
return res, err
|
||||||
|
|
@ -271,7 +271,7 @@ func (c *Client) sendGetSubscriptions(ctx context.Context) (res *GetSubscription
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("GetSubscriptions"),
|
otelogen.OperationID("GetSubscriptions"),
|
||||||
semconv.HTTPRequestMethodKey.String("GET"),
|
semconv.HTTPRequestMethodKey.String("GET"),
|
||||||
semconv.HTTPRouteKey.String("/subscription"),
|
semconv.HTTPRouteKey.String("/api/v1/subscription"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run stopwatch.
|
// Run stopwatch.
|
||||||
|
|
@ -304,7 +304,7 @@ func (c *Client) sendGetSubscriptions(ctx context.Context) (res *GetSubscription
|
||||||
stage = "BuildURL"
|
stage = "BuildURL"
|
||||||
u := uri.Clone(c.requestURL(ctx))
|
u := uri.Clone(c.requestURL(ctx))
|
||||||
var pathParts [1]string
|
var pathParts [1]string
|
||||||
pathParts[0] = "/subscription"
|
pathParts[0] = "/api/v1/subscription"
|
||||||
uri.AddPathParts(u, pathParts[:]...)
|
uri.AddPathParts(u, pathParts[:]...)
|
||||||
|
|
||||||
stage = "EncodeRequest"
|
stage = "EncodeRequest"
|
||||||
|
|
@ -333,7 +333,7 @@ func (c *Client) sendGetSubscriptions(ctx context.Context) (res *GetSubscription
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /satellite/subscribe
|
// POST /api/v1/satellite/subscribe
|
||||||
func (c *Client) SubscribeSatellite(ctx context.Context, request *SubscribeSatelliteReq) (*SubscribeSatelliteOK, error) {
|
func (c *Client) SubscribeSatellite(ctx context.Context, request *SubscribeSatelliteReq) (*SubscribeSatelliteOK, error) {
|
||||||
res, err := c.sendSubscribeSatellite(ctx, request)
|
res, err := c.sendSubscribeSatellite(ctx, request)
|
||||||
return res, err
|
return res, err
|
||||||
|
|
@ -343,7 +343,7 @@ func (c *Client) sendSubscribeSatellite(ctx context.Context, request *SubscribeS
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("SubscribeSatellite"),
|
otelogen.OperationID("SubscribeSatellite"),
|
||||||
semconv.HTTPRequestMethodKey.String("POST"),
|
semconv.HTTPRequestMethodKey.String("POST"),
|
||||||
semconv.HTTPRouteKey.String("/satellite/subscribe"),
|
semconv.HTTPRouteKey.String("/api/v1/satellite/subscribe"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run stopwatch.
|
// Run stopwatch.
|
||||||
|
|
@ -376,7 +376,7 @@ func (c *Client) sendSubscribeSatellite(ctx context.Context, request *SubscribeS
|
||||||
stage = "BuildURL"
|
stage = "BuildURL"
|
||||||
u := uri.Clone(c.requestURL(ctx))
|
u := uri.Clone(c.requestURL(ctx))
|
||||||
var pathParts [1]string
|
var pathParts [1]string
|
||||||
pathParts[0] = "/satellite/subscribe"
|
pathParts[0] = "/api/v1/satellite/subscribe"
|
||||||
uri.AddPathParts(u, pathParts[:]...)
|
uri.AddPathParts(u, pathParts[:]...)
|
||||||
|
|
||||||
stage = "EncodeRequest"
|
stage = "EncodeRequest"
|
||||||
|
|
@ -408,7 +408,7 @@ func (c *Client) sendSubscribeSatellite(ctx context.Context, request *SubscribeS
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /station/subscribe
|
// POST /api/v1/station/subscribe
|
||||||
func (c *Client) SubscribeStation(ctx context.Context, request *SubscribeStationReq) (*SubscribeStationOK, error) {
|
func (c *Client) SubscribeStation(ctx context.Context, request *SubscribeStationReq) (*SubscribeStationOK, error) {
|
||||||
res, err := c.sendSubscribeStation(ctx, request)
|
res, err := c.sendSubscribeStation(ctx, request)
|
||||||
return res, err
|
return res, err
|
||||||
|
|
@ -418,7 +418,7 @@ func (c *Client) sendSubscribeStation(ctx context.Context, request *SubscribeSta
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("SubscribeStation"),
|
otelogen.OperationID("SubscribeStation"),
|
||||||
semconv.HTTPRequestMethodKey.String("POST"),
|
semconv.HTTPRequestMethodKey.String("POST"),
|
||||||
semconv.HTTPRouteKey.String("/station/subscribe"),
|
semconv.HTTPRouteKey.String("/api/v1/station/subscribe"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run stopwatch.
|
// Run stopwatch.
|
||||||
|
|
@ -451,7 +451,7 @@ func (c *Client) sendSubscribeStation(ctx context.Context, request *SubscribeSta
|
||||||
stage = "BuildURL"
|
stage = "BuildURL"
|
||||||
u := uri.Clone(c.requestURL(ctx))
|
u := uri.Clone(c.requestURL(ctx))
|
||||||
var pathParts [1]string
|
var pathParts [1]string
|
||||||
pathParts[0] = "/station/subscribe"
|
pathParts[0] = "/api/v1/station/subscribe"
|
||||||
uri.AddPathParts(u, pathParts[:]...)
|
uri.AddPathParts(u, pathParts[:]...)
|
||||||
|
|
||||||
stage = "EncodeRequest"
|
stage = "EncodeRequest"
|
||||||
|
|
@ -483,7 +483,7 @@ func (c *Client) sendSubscribeStation(ctx context.Context, request *SubscribeSta
|
||||||
//
|
//
|
||||||
// Remove subscription by subscription ID.
|
// Remove subscription by subscription ID.
|
||||||
//
|
//
|
||||||
// DELETE /subscription
|
// DELETE /api/v1/subscription
|
||||||
func (c *Client) Unsubscribe(ctx context.Context, params UnsubscribeParams) error {
|
func (c *Client) Unsubscribe(ctx context.Context, params UnsubscribeParams) error {
|
||||||
_, err := c.sendUnsubscribe(ctx, params)
|
_, err := c.sendUnsubscribe(ctx, params)
|
||||||
return err
|
return err
|
||||||
|
|
@ -493,7 +493,7 @@ func (c *Client) sendUnsubscribe(ctx context.Context, params UnsubscribeParams)
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("Unsubscribe"),
|
otelogen.OperationID("Unsubscribe"),
|
||||||
semconv.HTTPRequestMethodKey.String("DELETE"),
|
semconv.HTTPRequestMethodKey.String("DELETE"),
|
||||||
semconv.HTTPRouteKey.String("/subscription"),
|
semconv.HTTPRouteKey.String("/api/v1/subscription"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run stopwatch.
|
// Run stopwatch.
|
||||||
|
|
@ -526,7 +526,7 @@ func (c *Client) sendUnsubscribe(ctx context.Context, params UnsubscribeParams)
|
||||||
stage = "BuildURL"
|
stage = "BuildURL"
|
||||||
u := uri.Clone(c.requestURL(ctx))
|
u := uri.Clone(c.requestURL(ctx))
|
||||||
var pathParts [1]string
|
var pathParts [1]string
|
||||||
pathParts[0] = "/subscription"
|
pathParts[0] = "/api/v1/subscription"
|
||||||
uri.AddPathParts(u, pathParts[:]...)
|
uri.AddPathParts(u, pathParts[:]...)
|
||||||
|
|
||||||
stage = "EncodeQueryParams"
|
stage = "EncodeQueryParams"
|
||||||
|
|
|
||||||
|
|
@ -34,14 +34,14 @@ func (c *codeRecorder) WriteHeader(status int) {
|
||||||
//
|
//
|
||||||
// Get available satellites.
|
// Get available satellites.
|
||||||
//
|
//
|
||||||
// GET /satellite
|
// GET /api/v1/satellite
|
||||||
func (s *Server) handleGetSatellitesRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleGetSatellitesRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
||||||
statusWriter := &codeRecorder{ResponseWriter: w}
|
statusWriter := &codeRecorder{ResponseWriter: w}
|
||||||
w = statusWriter
|
w = statusWriter
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("GetSatellites"),
|
otelogen.OperationID("GetSatellites"),
|
||||||
semconv.HTTPRequestMethodKey.String("GET"),
|
semconv.HTTPRequestMethodKey.String("GET"),
|
||||||
semconv.HTTPRouteKey.String("/satellite"),
|
semconv.HTTPRouteKey.String("/api/v1/satellite"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
|
|
@ -164,14 +164,14 @@ func (s *Server) handleGetSatellitesRequest(args [0]string, argsEscaped bool, w
|
||||||
//
|
//
|
||||||
// Get available stations.
|
// Get available stations.
|
||||||
//
|
//
|
||||||
// GET /station
|
// GET /api/v1/station
|
||||||
func (s *Server) handleGetStationsRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleGetStationsRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
||||||
statusWriter := &codeRecorder{ResponseWriter: w}
|
statusWriter := &codeRecorder{ResponseWriter: w}
|
||||||
w = statusWriter
|
w = statusWriter
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("GetStations"),
|
otelogen.OperationID("GetStations"),
|
||||||
semconv.HTTPRequestMethodKey.String("GET"),
|
semconv.HTTPRequestMethodKey.String("GET"),
|
||||||
semconv.HTTPRouteKey.String("/station"),
|
semconv.HTTPRouteKey.String("/api/v1/station"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
|
|
@ -294,14 +294,14 @@ func (s *Server) handleGetStationsRequest(args [0]string, argsEscaped bool, w ht
|
||||||
//
|
//
|
||||||
// Get current subscriptions.
|
// Get current subscriptions.
|
||||||
//
|
//
|
||||||
// GET /subscription
|
// GET /api/v1/subscription
|
||||||
func (s *Server) handleGetSubscriptionsRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleGetSubscriptionsRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
||||||
statusWriter := &codeRecorder{ResponseWriter: w}
|
statusWriter := &codeRecorder{ResponseWriter: w}
|
||||||
w = statusWriter
|
w = statusWriter
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("GetSubscriptions"),
|
otelogen.OperationID("GetSubscriptions"),
|
||||||
semconv.HTTPRequestMethodKey.String("GET"),
|
semconv.HTTPRequestMethodKey.String("GET"),
|
||||||
semconv.HTTPRouteKey.String("/subscription"),
|
semconv.HTTPRouteKey.String("/api/v1/subscription"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
|
|
@ -424,14 +424,14 @@ func (s *Server) handleGetSubscriptionsRequest(args [0]string, argsEscaped bool,
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /satellite/subscribe
|
// POST /api/v1/satellite/subscribe
|
||||||
func (s *Server) handleSubscribeSatelliteRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleSubscribeSatelliteRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
||||||
statusWriter := &codeRecorder{ResponseWriter: w}
|
statusWriter := &codeRecorder{ResponseWriter: w}
|
||||||
w = statusWriter
|
w = statusWriter
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("SubscribeSatellite"),
|
otelogen.OperationID("SubscribeSatellite"),
|
||||||
semconv.HTTPRequestMethodKey.String("POST"),
|
semconv.HTTPRequestMethodKey.String("POST"),
|
||||||
semconv.HTTPRouteKey.String("/satellite/subscribe"),
|
semconv.HTTPRouteKey.String("/api/v1/satellite/subscribe"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
|
|
@ -573,14 +573,14 @@ func (s *Server) handleSubscribeSatelliteRequest(args [0]string, argsEscaped boo
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /station/subscribe
|
// POST /api/v1/station/subscribe
|
||||||
func (s *Server) handleSubscribeStationRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleSubscribeStationRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
||||||
statusWriter := &codeRecorder{ResponseWriter: w}
|
statusWriter := &codeRecorder{ResponseWriter: w}
|
||||||
w = statusWriter
|
w = statusWriter
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("SubscribeStation"),
|
otelogen.OperationID("SubscribeStation"),
|
||||||
semconv.HTTPRequestMethodKey.String("POST"),
|
semconv.HTTPRequestMethodKey.String("POST"),
|
||||||
semconv.HTTPRouteKey.String("/station/subscribe"),
|
semconv.HTTPRouteKey.String("/api/v1/station/subscribe"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
|
|
@ -722,14 +722,14 @@ func (s *Server) handleSubscribeStationRequest(args [0]string, argsEscaped bool,
|
||||||
//
|
//
|
||||||
// Remove subscription by subscription ID.
|
// Remove subscription by subscription ID.
|
||||||
//
|
//
|
||||||
// DELETE /subscription
|
// DELETE /api/v1/subscription
|
||||||
func (s *Server) handleUnsubscribeRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleUnsubscribeRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
||||||
statusWriter := &codeRecorder{ResponseWriter: w}
|
statusWriter := &codeRecorder{ResponseWriter: w}
|
||||||
w = statusWriter
|
w = statusWriter
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("Unsubscribe"),
|
otelogen.OperationID("Unsubscribe"),
|
||||||
semconv.HTTPRequestMethodKey.String("DELETE"),
|
semconv.HTTPRequestMethodKey.String("DELETE"),
|
||||||
semconv.HTTPRouteKey.String("/subscription"),
|
semconv.HTTPRouteKey.String("/api/v1/subscription"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
|
|
|
||||||
|
|
@ -48,9 +48,9 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
switch elem[0] {
|
switch elem[0] {
|
||||||
case '/': // Prefix: "/s"
|
case '/': // Prefix: "/api/v1/s"
|
||||||
|
|
||||||
if l := len("/s"); len(elem) >= l && elem[0:l] == "/s" {
|
if l := len("/api/v1/s"); len(elem) >= l && elem[0:l] == "/api/v1/s" {
|
||||||
elem = elem[l:]
|
elem = elem[l:]
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
|
|
@ -246,9 +246,9 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
switch elem[0] {
|
switch elem[0] {
|
||||||
case '/': // Prefix: "/s"
|
case '/': // Prefix: "/api/v1/s"
|
||||||
|
|
||||||
if l := len("/s"); len(elem) >= l && elem[0:l] == "/s" {
|
if l := len("/api/v1/s"); len(elem) >= l && elem[0:l] == "/api/v1/s" {
|
||||||
elem = elem[l:]
|
elem = elem[l:]
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
|
|
@ -272,7 +272,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
||||||
r.name = GetSatellitesOperation
|
r.name = GetSatellitesOperation
|
||||||
r.summary = "Get available satellites"
|
r.summary = "Get available satellites"
|
||||||
r.operationID = "GetSatellites"
|
r.operationID = "GetSatellites"
|
||||||
r.pathPattern = "/satellite"
|
r.pathPattern = "/api/v1/satellite"
|
||||||
r.args = args
|
r.args = args
|
||||||
r.count = 0
|
r.count = 0
|
||||||
return r, true
|
return r, true
|
||||||
|
|
@ -296,7 +296,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
||||||
r.name = SubscribeSatelliteOperation
|
r.name = SubscribeSatelliteOperation
|
||||||
r.summary = "Subscribe to a given station"
|
r.summary = "Subscribe to a given station"
|
||||||
r.operationID = "SubscribeSatellite"
|
r.operationID = "SubscribeSatellite"
|
||||||
r.pathPattern = "/satellite/subscribe"
|
r.pathPattern = "/api/v1/satellite/subscribe"
|
||||||
r.args = args
|
r.args = args
|
||||||
r.count = 0
|
r.count = 0
|
||||||
return r, true
|
return r, true
|
||||||
|
|
@ -321,7 +321,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
||||||
r.name = GetStationsOperation
|
r.name = GetStationsOperation
|
||||||
r.summary = "Get available stations"
|
r.summary = "Get available stations"
|
||||||
r.operationID = "GetStations"
|
r.operationID = "GetStations"
|
||||||
r.pathPattern = "/station"
|
r.pathPattern = "/api/v1/station"
|
||||||
r.args = args
|
r.args = args
|
||||||
r.count = 0
|
r.count = 0
|
||||||
return r, true
|
return r, true
|
||||||
|
|
@ -345,7 +345,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
||||||
r.name = SubscribeStationOperation
|
r.name = SubscribeStationOperation
|
||||||
r.summary = "Subscribe to a given station"
|
r.summary = "Subscribe to a given station"
|
||||||
r.operationID = "SubscribeStation"
|
r.operationID = "SubscribeStation"
|
||||||
r.pathPattern = "/station/subscribe"
|
r.pathPattern = "/api/v1/station/subscribe"
|
||||||
r.args = args
|
r.args = args
|
||||||
r.count = 0
|
r.count = 0
|
||||||
return r, true
|
return r, true
|
||||||
|
|
@ -371,7 +371,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
||||||
r.name = UnsubscribeOperation
|
r.name = UnsubscribeOperation
|
||||||
r.summary = "Remove subscription by subscription ID"
|
r.summary = "Remove subscription by subscription ID"
|
||||||
r.operationID = "Unsubscribe"
|
r.operationID = "Unsubscribe"
|
||||||
r.pathPattern = "/subscription"
|
r.pathPattern = "/api/v1/subscription"
|
||||||
r.args = args
|
r.args = args
|
||||||
r.count = 0
|
r.count = 0
|
||||||
return r, true
|
return r, true
|
||||||
|
|
@ -379,7 +379,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
||||||
r.name = GetSubscriptionsOperation
|
r.name = GetSubscriptionsOperation
|
||||||
r.summary = "Get current subscriptions"
|
r.summary = "Get current subscriptions"
|
||||||
r.operationID = "GetSubscriptions"
|
r.operationID = "GetSubscriptions"
|
||||||
r.pathPattern = "/subscription"
|
r.pathPattern = "/api/v1/subscription"
|
||||||
r.args = args
|
r.args = args
|
||||||
r.count = 0
|
r.count = 0
|
||||||
return r, true
|
return r, true
|
||||||
|
|
|
||||||
|
|
@ -12,37 +12,37 @@ type Handler interface {
|
||||||
//
|
//
|
||||||
// Get available satellites.
|
// Get available satellites.
|
||||||
//
|
//
|
||||||
// GET /satellite
|
// GET /api/v1/satellite
|
||||||
GetSatellites(ctx context.Context) (*GetSatellitesOK, error)
|
GetSatellites(ctx context.Context) (*GetSatellitesOK, error)
|
||||||
// GetStations implements GetStations operation.
|
// GetStations implements GetStations operation.
|
||||||
//
|
//
|
||||||
// Get available stations.
|
// Get available stations.
|
||||||
//
|
//
|
||||||
// GET /station
|
// GET /api/v1/station
|
||||||
GetStations(ctx context.Context) (*GetStationsOK, error)
|
GetStations(ctx context.Context) (*GetStationsOK, error)
|
||||||
// GetSubscriptions implements GetSubscriptions operation.
|
// GetSubscriptions implements GetSubscriptions operation.
|
||||||
//
|
//
|
||||||
// Get current subscriptions.
|
// Get current subscriptions.
|
||||||
//
|
//
|
||||||
// GET /subscription
|
// GET /api/v1/subscription
|
||||||
GetSubscriptions(ctx context.Context) (*GetSubscriptionsOK, error)
|
GetSubscriptions(ctx context.Context) (*GetSubscriptionsOK, error)
|
||||||
// SubscribeSatellite implements SubscribeSatellite operation.
|
// SubscribeSatellite implements SubscribeSatellite operation.
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /satellite/subscribe
|
// POST /api/v1/satellite/subscribe
|
||||||
SubscribeSatellite(ctx context.Context, req *SubscribeSatelliteReq) (*SubscribeSatelliteOK, error)
|
SubscribeSatellite(ctx context.Context, req *SubscribeSatelliteReq) (*SubscribeSatelliteOK, error)
|
||||||
// SubscribeStation implements SubscribeStation operation.
|
// SubscribeStation implements SubscribeStation operation.
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /station/subscribe
|
// POST /api/v1/station/subscribe
|
||||||
SubscribeStation(ctx context.Context, req *SubscribeStationReq) (*SubscribeStationOK, error)
|
SubscribeStation(ctx context.Context, req *SubscribeStationReq) (*SubscribeStationOK, error)
|
||||||
// Unsubscribe implements Unsubscribe operation.
|
// Unsubscribe implements Unsubscribe operation.
|
||||||
//
|
//
|
||||||
// Remove subscription by subscription ID.
|
// Remove subscription by subscription ID.
|
||||||
//
|
//
|
||||||
// DELETE /subscription
|
// DELETE /api/v1/subscription
|
||||||
Unsubscribe(ctx context.Context, params UnsubscribeParams) error
|
Unsubscribe(ctx context.Context, params UnsubscribeParams) error
|
||||||
// NewError creates *ErrorStatusCode from error returned by handler.
|
// NewError creates *ErrorStatusCode from error returned by handler.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ var _ Handler = UnimplementedHandler{}
|
||||||
//
|
//
|
||||||
// Get available satellites.
|
// Get available satellites.
|
||||||
//
|
//
|
||||||
// GET /satellite
|
// GET /api/v1/satellite
|
||||||
func (UnimplementedHandler) GetSatellites(ctx context.Context) (r *GetSatellitesOK, _ error) {
|
func (UnimplementedHandler) GetSatellites(ctx context.Context) (r *GetSatellitesOK, _ error) {
|
||||||
return r, ht.ErrNotImplemented
|
return r, ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
@ -26,7 +26,7 @@ func (UnimplementedHandler) GetSatellites(ctx context.Context) (r *GetSatellites
|
||||||
//
|
//
|
||||||
// Get available stations.
|
// Get available stations.
|
||||||
//
|
//
|
||||||
// GET /station
|
// GET /api/v1/station
|
||||||
func (UnimplementedHandler) GetStations(ctx context.Context) (r *GetStationsOK, _ error) {
|
func (UnimplementedHandler) GetStations(ctx context.Context) (r *GetStationsOK, _ error) {
|
||||||
return r, ht.ErrNotImplemented
|
return r, ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
@ -35,7 +35,7 @@ func (UnimplementedHandler) GetStations(ctx context.Context) (r *GetStationsOK,
|
||||||
//
|
//
|
||||||
// Get current subscriptions.
|
// Get current subscriptions.
|
||||||
//
|
//
|
||||||
// GET /subscription
|
// GET /api/v1/subscription
|
||||||
func (UnimplementedHandler) GetSubscriptions(ctx context.Context) (r *GetSubscriptionsOK, _ error) {
|
func (UnimplementedHandler) GetSubscriptions(ctx context.Context) (r *GetSubscriptionsOK, _ error) {
|
||||||
return r, ht.ErrNotImplemented
|
return r, ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
@ -44,7 +44,7 @@ func (UnimplementedHandler) GetSubscriptions(ctx context.Context) (r *GetSubscri
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /satellite/subscribe
|
// POST /api/v1/satellite/subscribe
|
||||||
func (UnimplementedHandler) SubscribeSatellite(ctx context.Context, req *SubscribeSatelliteReq) (r *SubscribeSatelliteOK, _ error) {
|
func (UnimplementedHandler) SubscribeSatellite(ctx context.Context, req *SubscribeSatelliteReq) (r *SubscribeSatelliteOK, _ error) {
|
||||||
return r, ht.ErrNotImplemented
|
return r, ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
@ -53,7 +53,7 @@ func (UnimplementedHandler) SubscribeSatellite(ctx context.Context, req *Subscri
|
||||||
//
|
//
|
||||||
// Subscribe to a given station.
|
// Subscribe to a given station.
|
||||||
//
|
//
|
||||||
// POST /station/subscribe
|
// POST /api/v1/station/subscribe
|
||||||
func (UnimplementedHandler) SubscribeStation(ctx context.Context, req *SubscribeStationReq) (r *SubscribeStationOK, _ error) {
|
func (UnimplementedHandler) SubscribeStation(ctx context.Context, req *SubscribeStationReq) (r *SubscribeStationOK, _ error) {
|
||||||
return r, ht.ErrNotImplemented
|
return r, ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
@ -62,7 +62,7 @@ func (UnimplementedHandler) SubscribeStation(ctx context.Context, req *Subscribe
|
||||||
//
|
//
|
||||||
// Remove subscription by subscription ID.
|
// Remove subscription by subscription ID.
|
||||||
//
|
//
|
||||||
// DELETE /subscription
|
// DELETE /api/v1/subscription
|
||||||
func (UnimplementedHandler) Unsubscribe(ctx context.Context, params UnsubscribeParams) error {
|
func (UnimplementedHandler) Unsubscribe(ctx context.Context, params UnsubscribeParams) error {
|
||||||
return ht.ErrNotImplemented
|
return ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue