本文整理汇总了Golang中github.com/TheThingsNetwork/ttn/utils/errors.Wrap函数的典型用法代码示例。如果您正苦于以下问题:Golang Wrap函数的具体用法?Golang Wrap怎么用?Golang Wrap使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Wrap函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: DeleteDevice
func (h *handlerManager) DeleteDevice(ctx context.Context, in *pb.DeviceIdentifier) (*empty.Empty, error) {
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Device Identifier")
}
ctx, claims, err := h.validateTTNAuthAppContext(ctx, in.AppId)
if err != nil {
return nil, err
}
if !claims.AppRight(in.AppId, rights.Devices) {
return nil, errors.NewErrPermissionDenied(fmt.Sprintf(`No "devices" rights to application "%s"`, in.AppId))
}
if _, err := h.handler.applications.Get(in.AppId); err != nil {
return nil, errors.Wrap(err, "Application not registered to this Handler")
}
dev, err := h.handler.devices.Get(in.AppId, in.DevId)
if err != nil {
return nil, err
}
_, err = h.deviceManager.DeleteDevice(ctx, &pb_lorawan.DeviceIdentifier{AppEui: &dev.AppEUI, DevEui: &dev.DevEUI})
if err != nil && errors.GetErrType(errors.FromGRPCError(err)) != errors.NotFound {
return nil, errors.Wrap(errors.FromGRPCError(err), "Broker did not delete device")
}
err = h.handler.devices.Delete(in.AppId, in.DevId)
if err != nil {
return nil, err
}
return &empty.Empty{}, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:30,代码来源:manager_server.go
示例2: GatewayStatus
// GatewayStatus handles gateway status streams
func (s *RouterStreamServer) GatewayStatus(stream Router_GatewayStatusServer) error {
md, err := api.MetadataFromContext(stream.Context())
if err != nil {
return err
}
ch, err := s.GatewayStatusChanFunc(md)
if err != nil {
return err
}
defer func() {
close(ch)
}()
for {
status, err := stream.Recv()
if err == io.EOF {
return stream.SendAndClose(&empty.Empty{})
}
if err != nil {
return err
}
if err := status.Validate(); err != nil {
return errors.Wrap(err, "Invalid Gateway Status")
}
ch <- status
}
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:27,代码来源:server_streams.go
示例3: GetDevAddr
func (h *handlerManager) GetDevAddr(ctx context.Context, in *pb_lorawan.DevAddrRequest) (*pb_lorawan.DevAddrResponse, error) {
res, err := h.devAddrManager.GetDevAddr(ctx, in)
if err != nil {
return nil, errors.Wrap(errors.FromGRPCError(err), "Broker did not return DevAddr")
}
return res, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:7,代码来源:manager_server.go
示例4: GetPrefixes
func (b *brokerManager) GetPrefixes(ctx context.Context, in *lorawan.PrefixesRequest) (*lorawan.PrefixesResponse, error) {
res, err := b.devAddrManager.GetPrefixes(ctx, in)
if err != nil {
return nil, errors.Wrap(errors.FromGRPCError(err), "NetworkServer did not return prefixes")
}
return res, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:7,代码来源:manager_server.go
示例5: SetApplication
func (h *handlerManager) SetApplication(ctx context.Context, in *pb.Application) (*empty.Empty, error) {
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Application")
}
ctx, claims, err := h.validateTTNAuthAppContext(ctx, in.AppId)
if err != nil {
return nil, err
}
if !claims.AppRight(in.AppId, rights.AppSettings) {
return nil, errors.NewErrPermissionDenied(`No "settings" rights to application`)
}
app, err := h.handler.applications.Get(in.AppId)
if err != nil {
return nil, err
}
app.StartUpdate()
app.Decoder = in.Decoder
app.Converter = in.Converter
app.Validator = in.Validator
app.Encoder = in.Encoder
err = h.handler.applications.Set(app)
if err != nil {
return nil, err
}
return &empty.Empty{}, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:30,代码来源:manager_server.go
示例6: Uplink
// Uplink handles uplink streams
func (s *RouterStreamServer) Uplink(stream Router_UplinkServer) (err error) {
md, err := api.MetadataFromContext(stream.Context())
if err != nil {
return err
}
ch, err := s.UplinkChanFunc(md)
if err != nil {
return err
}
defer func() {
ctx := s.ctx
if err != nil {
ctx = ctx.WithError(err)
}
close(ch)
ctx.Debug("Closed Uplink stream")
}()
for {
uplink, err := stream.Recv()
if err == io.EOF {
return stream.SendAndClose(&empty.Empty{})
}
if err != nil {
return err
}
if err := uplink.Validate(); err != nil {
return errors.Wrap(err, "Invalid Uplink")
}
ch <- uplink
}
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:32,代码来源:server_streams.go
示例7: DeleteApplication
func (h *handlerManager) DeleteApplication(ctx context.Context, in *pb.ApplicationIdentifier) (*empty.Empty, error) {
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Application Identifier")
}
ctx, claims, err := h.validateTTNAuthAppContext(ctx, in.AppId)
if err != nil {
return nil, err
}
if !claims.AppRight(in.AppId, rights.AppSettings) {
return nil, errors.NewErrPermissionDenied(`No "settings" rights to application`)
}
_, err = h.handler.applications.Get(in.AppId)
if err != nil {
return nil, err
}
// Get and delete all devices for this application
devices, err := h.handler.devices.ListForApp(in.AppId)
if err != nil {
return nil, err
}
for _, dev := range devices {
_, err = h.deviceManager.DeleteDevice(ctx, &pb_lorawan.DeviceIdentifier{AppEui: &dev.AppEUI, DevEui: &dev.DevEUI})
if err != nil {
return nil, errors.Wrap(errors.FromGRPCError(err), "Broker did not delete device")
}
err = h.handler.devices.Delete(dev.AppID, dev.DevID)
if err != nil {
return nil, err
}
}
// Delete the Application
err = h.handler.applications.Delete(in.AppId)
if err != nil {
return nil, err
}
token, _ := api.TokenFromContext(ctx)
err = h.handler.Discovery.RemoveAppID(in.AppId, token)
if err != nil {
h.handler.Ctx.WithField("AppID", in.AppId).WithError(errors.FromGRPCError(err)).Warn("Could not unregister Application from Discovery")
}
return &empty.Empty{}, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:46,代码来源:manager_server.go
示例8: NotNilAndValid
// NotNilAndValid checks if the given interface is not nil AND validates it
func NotNilAndValid(in interface{}, argument string) error {
// Structs can not be nil and reflect.ValueOf(in).IsNil() would panic
if reflect.ValueOf(in).Kind() == reflect.Struct {
return errors.Wrap(Validate(in), "Invalid "+argument)
}
// We need to check for the interface to be nil and the value of the interface
// See: https://stackoverflow.com/questions/13476349/check-for-nil-and-nil-interface-in-go
if in == nil || reflect.ValueOf(in).IsNil() {
return errors.NewErrInvalidArgument(argument, "can not be empty")
}
if err := Validate(in); err != nil {
return errors.Wrap(Validate(in), "Invalid "+argument)
}
return nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:19,代码来源:validation.go
示例9: GetStatus
func (n *networkServerManager) GetStatus(ctx context.Context, in *pb.StatusRequest) (*pb.Status, error) {
if n.networkServer.Identity.Id != "dev" {
_, err := n.networkServer.ValidateTTNAuthContext(ctx)
if err != nil {
return nil, errors.Wrap(err, "No access")
}
}
status := n.networkServer.GetStatus()
if status == nil {
return new(pb.Status), nil
}
return status, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:13,代码来源:manager_server.go
示例10: GetDevicesForApplication
func (h *handlerManager) GetDevicesForApplication(ctx context.Context, in *pb.ApplicationIdentifier) (*pb.DeviceList, error) {
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Application Identifier")
}
ctx, claims, err := h.validateTTNAuthAppContext(ctx, in.AppId)
if err != nil {
return nil, err
}
if !claims.AppRight(in.AppId, rights.Devices) {
return nil, errors.NewErrPermissionDenied(fmt.Sprintf(`No "devices" rights to application "%s"`, in.AppId))
}
if _, err := h.handler.applications.Get(in.AppId); err != nil {
return nil, errors.Wrap(err, "Application not registered to this Handler")
}
devices, err := h.handler.devices.ListForApp(in.AppId)
if err != nil {
return nil, err
}
res := &pb.DeviceList{Devices: []*pb.Device{}}
for _, dev := range devices {
res.Devices = append(res.Devices, &pb.Device{
AppId: dev.AppID,
DevId: dev.DevID,
Device: &pb.Device_LorawanDevice{LorawanDevice: &pb_lorawan.Device{
AppId: dev.AppID,
AppEui: &dev.AppEUI,
DevId: dev.DevID,
DevEui: &dev.DevEUI,
DevAddr: &dev.DevAddr,
NwkSKey: &dev.NwkSKey,
AppSKey: &dev.AppSKey,
AppKey: &dev.AppKey,
}},
})
}
return res, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:39,代码来源:manager_server.go
示例11: PrepareActivation
func (s *networkServerRPC) PrepareActivation(ctx context.Context, activation *broker.DeduplicatedDeviceActivationRequest) (*broker.DeduplicatedDeviceActivationRequest, error) {
if err := s.ValidateContext(ctx); err != nil {
return nil, err
}
if err := activation.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Activation Request")
}
res, err := s.networkServer.HandlePrepareActivation(activation)
if err != nil {
return nil, err
}
return res, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:13,代码来源:server.go
示例12: Activate
// Activate implements RouterServer interface (github.com/TheThingsNetwork/ttn/api/router)
func (r *routerRPC) Activate(ctx context.Context, req *pb.DeviceActivationRequest) (*pb.DeviceActivationResponse, error) {
gateway, err := r.gatewayFromContext(ctx)
if err != nil {
return nil, err
}
if err := req.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Activation Request")
}
if r.uplinkRate.Limit(gateway.ID) {
return nil, grpc.Errorf(codes.ResourceExhausted, "Gateway reached uplink rate limit")
}
return r.router.HandleActivation(gateway.ID, req)
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:14,代码来源:server.go
示例13: Uplink
func (s *networkServerRPC) Uplink(ctx context.Context, message *broker.DeduplicatedUplinkMessage) (*broker.DeduplicatedUplinkMessage, error) {
if err := s.ValidateContext(ctx); err != nil {
return nil, err
}
if err := message.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Uplink")
}
res, err := s.networkServer.HandleUplink(message)
if err != nil {
return nil, err
}
return res, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:13,代码来源:server.go
示例14: GetDevices
func (s *networkServerRPC) GetDevices(ctx context.Context, req *pb.DevicesRequest) (*pb.DevicesResponse, error) {
if err := s.ValidateContext(ctx); err != nil {
return nil, err
}
if err := req.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Devices Request")
}
res, err := s.networkServer.HandleGetDevices(req)
if err != nil {
return nil, err
}
return res, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:13,代码来源:server.go
示例15: ActivationChallenge
func (h *handlerRPC) ActivationChallenge(ctx context.Context, challenge *pb_broker.ActivationChallengeRequest) (*pb_broker.ActivationChallengeResponse, error) {
_, err := h.handler.ValidateNetworkContext(ctx)
if err != nil {
return nil, err
}
if err := challenge.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Activation Challenge Request")
}
res, err := h.handler.HandleActivationChallenge(challenge)
if err != nil {
return nil, err
}
return res, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:14,代码来源:server.go
示例16: SetDevice
func (n *networkServerManager) SetDevice(ctx context.Context, in *pb_lorawan.Device) (*empty.Empty, error) {
dev, err := n.getDevice(ctx, &pb_lorawan.DeviceIdentifier{AppEui: in.AppEui, DevEui: in.DevEui})
if err != nil && errors.GetErrType(err) != errors.NotFound {
return nil, err
}
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Device")
}
claims, err := n.networkServer.Component.ValidateTTNAuthContext(ctx)
if err != nil {
return nil, err
}
if !claims.AppRight(in.AppId, rights.AppSettings) {
return nil, errors.NewErrPermissionDenied(fmt.Sprintf("No access to Application %s", dev.AppID))
}
if dev == nil {
dev = new(device.Device)
} else {
dev.StartUpdate()
}
dev.AppID = in.AppId
dev.AppEUI = *in.AppEui
dev.DevID = in.DevId
dev.DevEUI = *in.DevEui
dev.FCntUp = in.FCntUp
dev.FCntDown = in.FCntDown
dev.Options = device.Options{
DisableFCntCheck: in.DisableFCntCheck,
Uses32BitFCnt: in.Uses32BitFCnt,
ActivationConstraints: in.ActivationConstraints,
}
if in.NwkSKey != nil && in.DevAddr != nil {
dev.DevAddr = *in.DevAddr
dev.NwkSKey = *in.NwkSKey
}
err = n.networkServer.devices.Set(dev)
if err != nil {
return nil, err
}
return &empty.Empty{}, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:49,代码来源:manager_server.go
示例17: RegisterApplication
func (h *handlerManager) RegisterApplication(ctx context.Context, in *pb.ApplicationIdentifier) (*empty.Empty, error) {
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Application Identifier")
}
ctx, claims, err := h.validateTTNAuthAppContext(ctx, in.AppId)
if err != nil {
return nil, err
}
if !claims.AppRight(in.AppId, rights.AppSettings) {
return nil, errors.NewErrPermissionDenied(`No "settings" rights to application`)
}
app, err := h.handler.applications.Get(in.AppId)
if err != nil && errors.GetErrType(err) != errors.NotFound {
return nil, err
}
if app != nil {
return nil, errors.NewErrAlreadyExists("Application")
}
err = h.handler.applications.Set(&application.Application{
AppID: in.AppId,
})
if err != nil {
return nil, err
}
token, _ := api.TokenFromContext(ctx)
err = h.handler.Discovery.AddAppID(in.AppId, token)
if err != nil {
h.handler.Ctx.WithField("AppID", in.AppId).WithError(err).Warn("Could not register Application with Discovery")
}
_, err = h.handler.ttnBrokerManager.RegisterApplicationHandler(ctx, &pb_broker.ApplicationHandlerRegistration{
AppId: in.AppId,
HandlerId: h.handler.Identity.Id,
})
if err != nil {
h.handler.Ctx.WithField("AppID", in.AppId).WithError(err).Warn("Could not register Application with Broker")
}
return &empty.Empty{}, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:43,代码来源:manager_server.go
示例18: getDevice
func (n *networkServerManager) getDevice(ctx context.Context, in *pb_lorawan.DeviceIdentifier) (*device.Device, error) {
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Device Identifier")
}
claims, err := n.networkServer.Component.ValidateTTNAuthContext(ctx)
if err != nil {
return nil, err
}
if n.clientRate.Limit(claims.Subject) {
return nil, grpc.Errorf(codes.ResourceExhausted, "Rate limit for client reached")
}
dev, err := n.networkServer.devices.Get(*in.AppEui, *in.DevEui)
if err != nil {
return nil, err
}
if !claims.AppRight(dev.AppID, rights.AppSettings) {
return nil, errors.NewErrPermissionDenied(fmt.Sprintf("No access to Application %s", dev.AppID))
}
return dev, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:20,代码来源:manager_server.go
示例19: RegisterApplicationHandler
func (b *brokerManager) RegisterApplicationHandler(ctx context.Context, in *pb.ApplicationHandlerRegistration) (*empty.Empty, error) {
claims, err := b.broker.Component.ValidateTTNAuthContext(ctx)
if err != nil {
return nil, err
}
if err := in.Validate(); err != nil {
return nil, errors.Wrap(err, "Invalid Application Handler Registration")
}
if !claims.AppRight(in.AppId, rights.AppSettings) {
return nil, errors.NewErrPermissionDenied("No access to this application")
}
// Add Handler in local cache
handler, err := b.broker.Discovery.Get("handler", in.HandlerId)
if err != nil {
return nil, errors.NewErrInternal("Could not get Handler Announcement")
}
handler.Metadata = append(handler.Metadata, &discovery.Metadata{Metadata: &discovery.Metadata_AppId{
AppId: in.AppId,
}})
return &empty.Empty{}, nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:21,代码来源:manager_server.go
示例20: HandleDownlink
func (b *broker) HandleDownlink(downlink *pb.DownlinkMessage) error {
ctx := b.Ctx.WithFields(log.Fields{
"DevEUI": *downlink.DevEui,
"AppEUI": *downlink.AppEui,
})
var err error
start := time.Now()
defer func() {
if err != nil {
ctx.WithError(err).Warn("Could not handle downlink")
} else {
ctx.WithField("Duration", time.Now().Sub(start)).Info("Handled downlink")
}
}()
b.status.downlink.Mark(1)
downlink, err = b.ns.Downlink(b.Component.GetContext(b.nsToken), downlink)
if err != nil {
return errors.Wrap(errors.FromGRPCError(err), "NetworkServer did not handle downlink")
}
var routerID string
if id := strings.Split(downlink.DownlinkOption.Identifier, ":"); len(id) == 2 {
routerID = id[0]
} else {
return errors.NewErrInvalidArgument("DownlinkOption Identifier", "invalid format")
}
ctx = ctx.WithField("RouterID", routerID)
var router chan<- *pb.DownlinkMessage
router, err = b.getRouter(routerID)
if err != nil {
return err
}
router <- downlink
return nil
}
开发者ID:TheThingsNetwork,项目名称:ttn,代码行数:40,代码来源:downlink.go
注:本文中的github.com/TheThingsNetwork/ttn/utils/errors.Wrap函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论