diff --git a/.github/workflows/trivyimagescan.yaml b/.github/workflows/trivyimagescan.yaml index 7a93cdc..044f869 100644 --- a/.github/workflows/trivyimagescan.yaml +++ b/.github/workflows/trivyimagescan.yaml @@ -35,7 +35,7 @@ jobs: - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@7b7aa264d83dc58691451798b4d117d53d21edfe with: - image-ref: 'automated-checkout/as-vending:dev' + image-ref: 'automated-vending/as-vending:dev' format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-results-as-vending.sarif' @@ -64,7 +64,7 @@ jobs: - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@7b7aa264d83dc58691451798b4d117d53d21edfe with: - image-ref: 'automated-checkout/as-controller-board-status:dev' + image-ref: 'automated-vending/as-controller-board-status:dev' format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-results-as-controller-board-status.sarif' @@ -93,7 +93,7 @@ jobs: - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@7b7aa264d83dc58691451798b4d117d53d21edfe with: - image-ref: 'automated-checkout/ds-card-reader:dev' + image-ref: 'automated-vending/ds-card-reader:dev' format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-results-ds-card-reader.sarif' @@ -122,7 +122,7 @@ jobs: - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@7b7aa264d83dc58691451798b4d117d53d21edfe with: - image-ref: 'automated-checkout/ds-controller-board:dev' + image-ref: 'automated-vending/ds-controller-board:dev' format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-results-ds-controller-board.sarif' @@ -151,7 +151,7 @@ jobs: - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@7b7aa264d83dc58691451798b4d117d53d21edfe with: - image-ref: 'automated-checkout/ms-authentication:dev' + image-ref: 'automated-vending/ms-authentication:dev' format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-results-ms-authentication.sarif' @@ -180,7 +180,7 @@ jobs: - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@7b7aa264d83dc58691451798b4d117d53d21edfe with: - image-ref: 'automated-checkout/ms-inventory:dev' + image-ref: 'automated-vending/ms-inventory:dev' format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-results-ms-inventory.sarif' @@ -209,7 +209,7 @@ jobs: - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@7b7aa264d83dc58691451798b4d117d53d21edfe with: - image-ref: 'automated-checkout/ms-ledger:dev' + image-ref: 'automated-vending/ms-ledger:dev' format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-results-ms-ledger.sarif' diff --git a/LICENSE b/LICENSE index 7c6d70c..9a3563f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/Makefile b/Makefile index 13c8568..0cec633 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: clean \ @@ -37,24 +37,26 @@ run-portainer: docker compose -f docker-compose.portainer.yml up -d run: - docker compose -f docker-compose.ac.yml -f docker-compose.edgex.yml up -d + docker compose -f docker-compose.av.yml -f docker-compose.edgex.yml up -d + +run-edgex: + docker compose -f docker-compose.edgex.yml up -d run-physical: - docker compose -f docker-compose.ac.yml -f docker-compose.edgex.yml -f docker-compose.physical.card-reader.yml -f docker-compose.physical.controller-board.yml up -d + docker compose -f docker-compose.av.yml -f docker-compose.edgex.yml -f docker-compose.physical.card-reader.yml -f docker-compose.physical.controller-board.yml up -d run-physical-card-reader: - docker compose -f docker-compose.ac.yml -f docker-compose.edgex.yml -f docker-compose.physical.card-reader.yml up -d + docker compose -f docker-compose.av.yml -f docker-compose.edgex.yml -f docker-compose.physical.card-reader.yml up -d run-physical-controller-board: - docker compose -f docker-compose.ac.yml -f docker-compose.edgex.yml -f docker-compose.physical.controller-board.yml up -d + docker compose -f docker-compose.av.yml -f docker-compose.edgex.yml -f docker-compose.physical.controller-board.yml up -d down: - -docker compose -f docker-compose.ac.yml -f docker-compose.edgex.yml stop -t 1 - -docker compose -f docker-compose.ac.yml -f docker-compose.edgex.yml down + -docker compose -f docker-compose.av.yml -f docker-compose.edgex.yml stop -t 1 + -docker compose -f docker-compose.av.yml -f docker-compose.edgex.yml down clean: down docker-rm - docker rmi -f $$(docker images | grep '' | awk '{print $$3}') && \ - docker rmi -f $$(docker images | grep automated-checkout | awk '{print $$3}') && \ + docker rmi -f $$(docker images | grep 'automated-vending' | awk '{print $$3}') && \ docker volume prune -f && \ docker network prune -f diff --git a/README.md b/README.md index a73811c..f65baaf 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# Automated Checkout +# Automated Vending -For complete documentation on the Automated Checkout Reference Design, please visit **[this repository's GitHub Pages site](https://intel-retail.github.io/automated-vending/index.html)**. +For complete documentation on the Automated Vending Reference Design, please visit **[this repository's GitHub Pages site](https://intel-retail.github.io/automated-vending/index.html)**. diff --git a/as-controller-board-status/.golangci.yml b/as-controller-board-status/.golangci.yml index 61af441..efc6e80 100644 --- a/as-controller-board-status/.golangci.yml +++ b/as-controller-board-status/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: diff --git a/as-controller-board-status/Dockerfile b/as-controller-board-status/Dockerfile index d4e0044..e2d44e2 100644 --- a/as-controller-board-status/Dockerfile +++ b/as-controller-board-status/Dockerfile @@ -1,14 +1,15 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -FROM golang:1.18-alpine3.16 AS builder +FROM golang:1.20-alpine3.17 AS builder LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' # add git for go modules -RUN apk update && apk add --no-cache make git gcc libc-dev zeromq-dev linux-headers +# hadolint ignore=DL3018 +RUN apk update && apk add --no-cache make git ENV GO111MODULE=on WORKDIR /usr/local/bin/ @@ -28,13 +29,12 @@ COPY . . RUN make gobuild # Next image - Copy built Go binary into new workspace -FROM alpine +FROM alpine:3.17 LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' -RUN apk --no-cache add zeromq -COPY --from=builder /usr/local/bin/as-controller-board-status/res/configuration.toml /res/configuration.toml +COPY --from=builder /usr/local/bin/as-controller-board-status/res/configuration.yaml /res/configuration.yaml COPY --from=builder /usr/local/bin/as-controller-board-status/main /as-controller-board-status CMD [ "/as-controller-board-status", "-cp=consul.http://edgex-core-consul:8500", "-r"] diff --git a/as-controller-board-status/LICENSE b/as-controller-board-status/LICENSE index 7bad583..4f84e34 100644 --- a/as-controller-board-status/LICENSE +++ b/as-controller-board-status/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/as-controller-board-status/Makefile b/as-controller-board-status/Makefile index 9215ffa..2531110 100644 --- a/as-controller-board-status/Makefile +++ b/as-controller-board-status/Makefile @@ -1,9 +1,9 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build gobuild run gorun stop test lint -MICROSERVICE=automated-checkout/as-controller-board-status +MICROSERVICE=automated-vending/as-controller-board-status ARCH=$(shell uname -m) @@ -19,7 +19,7 @@ docker: . gobuild: tidy - CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a -installsuffix cgo main.go + CGO_ENABLED=0 GOOS=linux go build -ldflags='-s -w' -a main.go run: docker run \ @@ -34,10 +34,10 @@ stop: docker rm -f $(MICROSERVICE):dev test: - go test -tags no_zmq -test.v -cover ./... + go test -test.v -cover ./... testHTML: - go test -tags no_zmq -test.v -coverprofile=test_coverage.out ./... && \ + go test -test.v -coverprofile=test_coverage.out ./... && \ go tool cover -html=test_coverage.out lint: diff --git a/as-controller-board-status/config/configuration.go b/as-controller-board-status/config/configuration.go index bf7e1fa..e0ad3ba 100644 --- a/as-controller-board-status/config/configuration.go +++ b/as-controller-board-status/config/configuration.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package config @@ -19,7 +19,8 @@ type ControllerBoardStatusConfig struct { DeviceName string MaxTemperatureThreshold float64 MinTemperatureThreshold float64 - DoorStatusCommandEndpoint string + InferenceDeviceName string + InferenceDoorStatusCmd string NotificationCategory string NotificationEmailAddresses string NotificationLabels string diff --git a/as-controller-board-status/functions/common.go b/as-controller-board-status/functions/common.go index 965b3c1..439ec94 100644 --- a/as-controller-board-status/functions/common.go +++ b/as-controller-board-status/functions/common.go @@ -1,14 +1,13 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions import ( "bytes" + "encoding/json" "fmt" "net/http" - - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) const ( @@ -22,13 +21,14 @@ const ( // and submit it as part of the outbound REST request. func (boardStatus *CheckBoardStatus) RESTCommandJSON(restURL string, restMethod string, inputInterface interface{}) (err error) { // Serialize the inputInterface - inputInterfaceJSON, err := utilities.GetAsJSON(inputInterface) + inputInterfaceJSON, err := json.Marshal(inputInterface) + if err != nil { return fmt.Errorf("failed to serialize the input interface as JSON: %v", err.Error()) } // Build out the request - req, err := http.NewRequest(restMethod, restURL, bytes.NewBuffer([]byte(inputInterfaceJSON))) + req, err := http.NewRequest(restMethod, restURL, bytes.NewBuffer(inputInterfaceJSON)) if err != nil { return fmt.Errorf("failed to build the REST %v request for the URL %v due to error: %v", restMethod, restURL, err.Error()) } diff --git a/as-controller-board-status/functions/common_test.go b/as-controller-board-status/functions/common_test.go index cda5269..3bc7ad5 100644 --- a/as-controller-board-status/functions/common_test.go +++ b/as-controller-board-status/functions/common_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions @@ -20,7 +20,6 @@ const ( DeviceName = "DeviceName" MaxTemperatureThreshold = "MaxTemperatureThreshold" MinTemperatureThreshold = "MinTemperatureThreshold" - DoorStatusCommandEndpoint = "DoorStatusCommandEndpoint" NotificationCategory = "NotificationCategory" NotificationEmailAddresses = "NotificationEmailAddresses" NotificationLabels = "NotificationLabels" @@ -43,12 +42,13 @@ func GetCommonSuccessConfig() *config.ControllerBoardStatusConfig { DeviceName: "controller-board", MaxTemperatureThreshold: 83.0, MinTemperatureThreshold: 10.0, - DoorStatusCommandEndpoint: "http://localhost:48082/api/v2/device/name/Inference-device/vendingDoorStatus", + InferenceDeviceName: "Inference-device", + InferenceDoorStatusCmd: "inferenceDoorStatus", NotificationCategory: "HW_HEALTH", NotificationEmailAddresses: "test@site.com,test@site.com", NotificationLabels: "HW_HEALTH", NotificationReceiver: "System Administrator", - NotificationSender: "Automated Checkout Maintenance Notification", + NotificationSender: "Automated Vending Maintenance Notification", NotificationSeverity: "CRITICAL", NotificationName: "maintenance-notification", NotificationSubscriptionMaxRESTRetries: 10, @@ -166,7 +166,7 @@ func prepRESTCommandJSONTest() ([]testTableRESTCommandJSONStruct, []*httptest.Se "test": make(chan bool), }, HTTPTestServer: testServerStatusOK, - Output: fmt.Errorf("failed to serialize the input interface as JSON: Failed to marshal into JSON string: json: unsupported type: chan bool"), + Output: fmt.Errorf("failed to serialize the input interface as JSON: json: unsupported type: chan bool"), }) output = append(output, testTableRESTCommandJSONStruct{ diff --git a/as-controller-board-status/functions/models.go b/as-controller-board-status/functions/models.go index eaea365..e571dbf 100644 --- a/as-controller-board-status/functions/models.go +++ b/as-controller-board-status/functions/models.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/interfaces" ) // ControllerBoardStatusAppSettings is a data structure that holds the @@ -19,7 +19,6 @@ type ControllerBoardStatusAppSettings struct { DeviceName string MaxTemperatureThreshold float64 MinTemperatureThreshold float64 - DoorStatusCommandEndpoint string NotificationCategory string NotificationEmailAddresses []string NotificationLabels []string @@ -70,6 +69,7 @@ type CheckBoardStatus struct { Configuration *config.ControllerBoardStatusConfig SubscriptionClient interfaces.SubscriptionClient NotificationClient interfaces.NotificationClient + CommandClient interfaces.CommandClient ControllerBoardStatus *ControllerBoardStatus averageTemperatureMeasurement time.Duration notificationSubscriptionRESTRetryInterval time.Duration @@ -79,15 +79,6 @@ type CheckBoardStatus struct { notificationLabels []string } -// VendingDoorStatus is a string representation of a boolean whose state corresponds -// to the whether the doorClosed state is true or false. This data is sent -// to the MQTT device service for processing by the Automated Checkout inference -// algorithm, which will act if the door state flips from open (false) to -// closed (true). -type VendingDoorStatus struct { - VendingDoorStatus string `json:"inferenceDoorStatus"` // TODO: remove inference and rename to vendingDoorStatus -} - func (checkBoardStatus *CheckBoardStatus) ParseStringConfigurations() error { var err error checkBoardStatus.notificationEmailAddresses = strings.Split(checkBoardStatus.Configuration.NotificationEmailAddresses, ",") diff --git a/as-controller-board-status/functions/notify.go b/as-controller-board-status/functions/notify.go index addba41..37c5d01 100644 --- a/as-controller-board-status/functions/notify.go +++ b/as-controller-board-status/functions/notify.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions @@ -9,8 +9,8 @@ import ( "github.com/google/uuid" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos/requests" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos/requests" ) // SubscribeToNotificationService configures an email notification and submits diff --git a/as-controller-board-status/functions/notify_test.go b/as-controller-board-status/functions/notify_test.go index 4b4010d..aaf0d66 100644 --- a/as-controller-board-status/functions/notify_test.go +++ b/as-controller-board-status/functions/notify_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions @@ -10,8 +10,8 @@ import ( "net/http/httptest" "testing" - client_mocks "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/interfaces/mocks" - edgex_errors "github.com/edgexfoundry/go-mod-core-contracts/v2/errors" + client_mocks "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/interfaces/mocks" + edgex_errors "github.com/edgexfoundry/go-mod-core-contracts/v3/errors" assert "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) diff --git a/as-controller-board-status/functions/output.go b/as-controller-board-status/functions/output.go index ad350b1..2a3068b 100644 --- a/as-controller-board-status/functions/output.go +++ b/as-controller-board-status/functions/output.go @@ -1,19 +1,21 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions import ( + "context" "encoding/json" + "errors" "fmt" "net/http" "sort" "strconv" "time" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos" ) const ( @@ -22,13 +24,14 @@ const ( // ControllerBoardDeviceServiceDeviceName is the name of the EdgeX device // corresponding to our upstream event source. ControllerBoardDeviceServiceDeviceName = "controller-board" + ControllerBoardResourceName = "controller-board-status" ) // CheckControllerBoardStatus is an EdgeX function that is passed into the EdgeX SDK's function pipeline. // It is a decision function that allows for multiple devices to have their events processed // correctly by this application service. In this case, only one unique type of EdgeX device will come // through to this function, but in general this is basically a template function that is also followed -// in other services in the Automated Checkout project. +// in other services in the Automated Vending project. func (boardStatus *CheckBoardStatus) CheckControllerBoardStatus(ctx interfaces.AppFunctionContext, data interface{}) (bool, interface{}) { if data == nil { // We didn't receive a result @@ -45,9 +48,13 @@ func (boardStatus *CheckBoardStatus) CheckControllerBoardStatus(ctx interfaces.A if len(eventReading.Value) < 1 { return false, fmt.Errorf("event reading was empty") } - lc.Debugf("Received event reading value: %s", eventReading.Value) + if eventReading.ResourceName != ControllerBoardResourceName { + lc.Debugf("Non %s event: %s", ControllerBoardResourceName, eventReading.ResourceName) + continue + } + // Unmarshal the event reading data into the global controllerBoardStatus variable err := json.Unmarshal([]byte(eventReading.Value), &boardStatus.ControllerBoardStatus) if err != nil { @@ -121,7 +128,7 @@ func getTempThresholdExceededMessage(minOrMax string, avgTemp float64, tempThres if minOrMax != maximum && minOrMax != minimum { return "", fmt.Errorf("Please specify minOrMax as \"%v\" or \"%v\", the value given was \"%v\"", maximum, minimum, minOrMax) } - resultMessage := fmt.Sprintf("The internal automated checkout's temperature is currently %.2f, and this temperature exceeds the configured %v temperature threshold of %v degrees. The automated checkout needs maintenance as of: %s", avgTemp, minOrMax, tempThreshold, time.Now().Format("_2 Jan, Mon | 3:04PM MST")) + resultMessage := fmt.Sprintf("The internal automated vending's temperature is currently %.2f, and this temperature exceeds the configured %v temperature threshold of %v degrees. The automated vending needs maintenance as of: %s", avgTemp, minOrMax, tempThreshold, time.Now().Format("_2 Jan, Mon | 3:04PM MST")) return resultMessage, nil } @@ -227,8 +234,8 @@ func AvgTemp(measurements []TempMeasurement, duration time.Duration) (float64, i } // processVendingDoorState checks to see if the vending door state has changed -// and if it has changed, it will then submit EdgeX commands (REST calls) -// to the MQTT device service and the central vending state endpoint. +// and if it has changed, it will then submit the new state to the central vending state endpoint +// and to EdgeX via command client. func (boardStatus *CheckBoardStatus) processVendingDoorState(lc logger.LoggingClient, doorClosed bool) error { if boardStatus.DoorClosed != doorClosed { // Set the boardStatus's DoorClosed value to the new value @@ -246,14 +253,48 @@ func (boardStatus *CheckBoardStatus) processVendingDoorState(lc logger.LoggingCl return fmt.Errorf("failed to submit the controller board's status to the central vending state service: %v", err.Error()) } - // Prepare a message to be sent to the MQTT bus. Depending on the state - // of the door, this message may trigger a CV inference - err = boardStatus.RESTCommandJSON(boardStatus.Configuration.DoorStatusCommandEndpoint, http.MethodPut, VendingDoorStatus{ - VendingDoorStatus: strconv.FormatBool(doorClosed), - }) + // Prepare and send EdgeX command. Depending on the state of the door, this message may trigger a CV inference + settings := make(map[string]string) + settings["inferenceDoorStatus"] = strconv.FormatBool(doorClosed) + err = boardStatus.SendCommand(lc, http.MethodPut, boardStatus.Configuration.InferenceDeviceName, boardStatus.Configuration.InferenceDoorStatusCmd, + settings) + if err != nil { + return fmt.Errorf("failed to submit the vending door state to the command client: %v", err.Error()) + } + } + + return nil +} + +// SendCommand issues CommandClient GET and SET command calls, CommandClient takes care of http calls, +// here the requirement are actionName, deviceName, commandName and settings, logger client is needed for logging +func (boardStatus *CheckBoardStatus) SendCommand(lc logger.LoggingClient, actionName string, deviceName string, + commandName string, settings map[string]string) error { + lc.Debug("Sending Command") + + switch actionName { + case http.MethodPut: + lc.Debugf("executing %s action", actionName) + lc.Debugf("Issuing SET command '%s' for device '%s'", commandName, deviceName) + + response, err := boardStatus.CommandClient.IssueSetCommandByName(context.Background(), deviceName, commandName, settings) if err != nil { - return fmt.Errorf("failed to submit the vending door state to the MQTT device service: %v", err.Error()) + return fmt.Errorf("failed to issue '%s' set command to '%s' device: %s", commandName, deviceName, err.Error()) } + + lc.Debugf("response status: %d", response.StatusCode) + + case http.MethodGet: + lc.Debugf("executing %s action", actionName) + lc.Debugf("Issuing GET command '%s' for device '%s'", commandName, deviceName) + response, err := boardStatus.CommandClient.IssueGetCommandByName(context.Background(), deviceName, commandName, false, true) + if err != nil { + return fmt.Errorf("failed to issue '%s' get command to '%s' device: %s", commandName, deviceName, err.Error()) + } + lc.Debugf("response status: %d", response.StatusCode) + + default: + return errors.New("Invalid action requested: " + actionName) } return nil diff --git a/as-controller-board-status/functions/output_test.go b/as-controller-board-status/functions/output_test.go index 1ba0ca8..dd95ac7 100644 --- a/as-controller-board-status/functions/output_test.go +++ b/as-controller-board-status/functions/output_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions @@ -6,16 +6,17 @@ package functions import ( "as-controller-board-status/config" "fmt" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos/common" "net/http" "net/http/httptest" "testing" "time" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - client_mocks "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + client_mocks "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -29,12 +30,13 @@ func getCommonApplicationSettingsTyped() *config.ControllerBoardStatusConfig { DeviceName: "controller-board", MaxTemperatureThreshold: temp51, MinTemperatureThreshold: temp49, - DoorStatusCommandEndpoint: "http://localhost:48082/api/v2/device/name/Inference-device/vendingDoorStatus", + InferenceDeviceName: "Inference-device", + InferenceDoorStatusCmd: "inferenceDoorStatus", NotificationCategory: "HW_HEALTH", NotificationEmailAddresses: "test@site.com,test@site.com", NotificationLabels: "HW_HEALTH", NotificationReceiver: "System Administrator", - NotificationSender: "Automated Checkout Maintenance Notification", + NotificationSender: "Automated Vending Maintenance Notification", NotificationSeverity: "CRITICAL", NotificationName: "maintenance-notification", NotificationSubscriptionMaxRESTRetries: 10, @@ -83,9 +85,12 @@ const ( // x failure to run ProcessApplicationSettings due to missing config option // x failure to unmarshal ControllerBoardStatus from event reading // x failure to call processTemperature, which can be created by sending a -// status other than "Accepted" via the NotificationHost +// +// status other than "Accepted" via the NotificationHost +// // x failure to call processVendingDoorState, which can be created by -// sending a status other than status OK to the DoorStatusCommandEndpoint +// +// sending a status other than status OK to the DoorStatusCommandEndpoint // // = 6 test cases total, 3 httptest servers // @@ -116,11 +121,22 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB mockNotificationClient := &client_mocks.NotificationClient{} mockNotificationClient.On("SendNotification", mock.Anything, mock.Anything).Return(nil, nil) + resp := common.BaseResponse{ + StatusCode: http.StatusOK, + } + mockCommandClient := &client_mocks.CommandClient{} + mockCommandClient.On("IssueSetCommandByName", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(resp, nil) + + resp = common.BaseResponse{ + StatusCode: http.StatusInternalServerError, + } + mockErrCommandClient := &client_mocks.CommandClient{} + mockErrCommandClient.On("IssueSetCommandByName", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(resp, nil) + // The success condition is ideal, and is configured to use URL's that all // respond with responses that correspond to successful scenarios. edgexcontextSuccess := pkg.NewAppFuncContextForTest(correlationID, lc) configSuccess := getCommonApplicationSettingsTyped() - configSuccess.DoorStatusCommandEndpoint = testServerStatusOK.URL configSuccess.VendingEndpoint = testServerStatusOK.URL configSuccess.MinTemperatureThreshold = temp51 configSuccess.MaxTemperatureThreshold = temp49 @@ -130,7 +146,6 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB // board state that has more measurements than the cutoff edgexcontextSuccessMinThresholdExceeded := pkg.NewAppFuncContextForTest(correlationID, lc) configSuccessMinThresholdExceeded := getCommonApplicationSettingsTyped() - configSuccessMinThresholdExceeded.DoorStatusCommandEndpoint = testServerStatusOK.URL configSuccessMinThresholdExceeded.VendingEndpoint = testServerStatusOK.URL configSuccessMinThresholdExceeded.MinTemperatureThreshold = temp51 @@ -138,7 +153,6 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB // and make the VendingEndpoint throw an error. edgexcontextBadVendingEndpointMaxThresholdExceeded := pkg.NewAppFuncContextForTest(correlationID, lc) configBadVendingEndpointMaxThresholdExceeded := getCommonApplicationSettingsTyped() - configBadVendingEndpointMaxThresholdExceeded.DoorStatusCommandEndpoint = testServerStatusOK.URL configBadVendingEndpointMaxThresholdExceeded.VendingEndpoint = testServerThrowError.URL configBadVendingEndpointMaxThresholdExceeded.MaxTemperatureThreshold = temp49 @@ -147,7 +161,6 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB // we want. We want Accepted, but we're going to get 500 edgexcontextUnacceptingNotificationHostMaxThresholdExceeded := pkg.NewAppFuncContextForTest(correlationID, lc) configUnacceptingNotificationHostMaxThresholdExceeded := getCommonApplicationSettingsTyped() - configUnacceptingNotificationHostMaxThresholdExceeded.DoorStatusCommandEndpoint = testServerStatusOK.URL configUnacceptingNotificationHostMaxThresholdExceeded.VendingEndpoint = testServerStatusOK.URL configUnacceptingNotificationHostMaxThresholdExceeded.MaxTemperatureThreshold = temp49 @@ -160,20 +173,16 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB configBadNotificationHostThresholdsExceeded.VendingEndpoint = testServerStatusOK.URL configBadNotificationHostThresholdsExceeded.MaxTemperatureThreshold = temp49 - // Set bad MQTT and Vending endpoints to produce specific error conditions - // in processTemperature, which first sends a request to MQTT, then - // another request to the vending endpoint - edgexcontextBadDoorStatusCommandEndpoint := pkg.NewAppFuncContextForTest(correlationID, lc) - configBadDoorStatusCommandEndpoint := getCommonApplicationSettingsTyped() - configBadDoorStatusCommandEndpoint.DoorStatusCommandEndpoint = testServerThrowError.URL - configBadDoorStatusCommandEndpoint.VendingEndpoint = testServerStatusOK.URL - - // As described above, in order to produce the error condition for - // processTemperature failing to hit the VendingEndpoint, we have to hit - // the DoorStatusCommandEndpoint successfully first + // Setup for Device Command (mockErrCommandClient used in one of the below testcases) to throw error to produce specific error conditions + // in processTemperature, which sends a request to the vending endpoint + edgexcontextBadDoorStatusCommand := pkg.NewAppFuncContextForTest(correlationID, lc) + configBadDoorStatusCommand := getCommonApplicationSettingsTyped() + configBadDoorStatusCommand.VendingEndpoint = testServerStatusOK.URL + + // Set the Vending endpoint to throw error for + // processTemperature failing to hit the VendingEndpoint edgexcontextBadVendingEndpoint := pkg.NewAppFuncContextForTest(correlationID, lc) configBadVendingEndpoint := getCommonApplicationSettingsTyped() - configBadVendingEndpoint.DoorStatusCommandEndpoint = testServerStatusOK.URL configBadVendingEndpoint.VendingEndpoint = testServerThrowError.URL // The expected incoming event reading from the controller board device @@ -188,7 +197,8 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB DeviceName: ControllerBoardDeviceServiceDeviceName, Readings: []dtos.BaseReading{ { - DeviceName: ControllerBoardDeviceServiceDeviceName, + ResourceName: ControllerBoardResourceName, + DeviceName: ControllerBoardDeviceServiceDeviceName, SimpleReading: dtos.SimpleReading{ Value: controllerBoardStatusSuccessReadingValue, }, @@ -202,7 +212,8 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB DeviceName: ControllerBoardDeviceServiceDeviceName, Readings: []dtos.BaseReading{ { - DeviceName: ControllerBoardDeviceServiceDeviceName, + ResourceName: ControllerBoardResourceName, + DeviceName: ControllerBoardDeviceServiceDeviceName, SimpleReading: dtos.SimpleReading{ Value: `invalid json value`, }, @@ -227,6 +238,7 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB LastNotified: time.Now().Add(time.Minute * -3), Configuration: configSuccess, NotificationClient: mockNotificationClient, + CommandClient: mockCommandClient, }, OutputBool: true, OutputInterface: controllerBoardStatusEventSuccess, @@ -318,6 +330,7 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB LastNotified: time.Now().Add(time.Minute * -3), Configuration: configBadNotificationHostThresholdsExceeded, NotificationClient: mockNotificationClient, + CommandClient: mockCommandClient, }, OutputBool: true, OutputInterface: controllerBoardStatusEventSuccess, @@ -327,17 +340,18 @@ func prepCheckControllerBoardStatusTest() (testTable []testTableCheckControllerB ExpectedTemperatureMeasurementSliceLength: 1, }, { - TestCaseName: "Unsuccessful due to DoorStatusCommandEndpoint not responding with HTTP 200 OK, no temperature notification sent", - InputEdgexContext: edgexcontextBadDoorStatusCommandEndpoint, + TestCaseName: "Unsuccessful due to Device Command not responding with HTTP 200 OK, no temperature notification sent", + InputEdgexContext: edgexcontextBadDoorStatusCommand, InputData: controllerBoardStatusEventSuccess, InputCheckBoardStatus: CheckBoardStatus{ LastNotified: time.Now().Add(time.Minute * -3), - Configuration: configBadDoorStatusCommandEndpoint, + Configuration: configBadDoorStatusCommand, NotificationClient: mockNotificationClient, + CommandClient: mockErrCommandClient, }, OutputBool: true, OutputInterface: controllerBoardStatusEventSuccess, - OutputLogs: fmt.Sprintf("Encountered error while checking the open/closed state of the door: failed to submit the vending door state to the MQTT device service: Failed to submit REST PUT request due to error: %v \\\"%v\\\": %v", "Put", configBadDoorStatusCommandEndpoint.DoorStatusCommandEndpoint, "EOF"), + OutputLogs: fmt.Sprintf("Encountered error while checking the open/closed state of the door: failed to submit the vending door state to the device command: Failed to submit REST PUT request due to error: %v : %v", "Put", "EOF"), ShouldLastNotifiedBeDifferent: false, ExpectedTemperatureMeasurementSliceLength: 1, }, diff --git a/as-controller-board-status/go.mod b/as-controller-board-status/go.mod index f523b71..cbc46ac 100644 --- a/as-controller-board-status/go.mod +++ b/as-controller-board-status/go.mod @@ -1,74 +1,77 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module as-controller-board-status -go 1.18 +go 1.20 require ( - github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 - github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 + github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 github.com/google/uuid v1.3.0 - github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.4 ) require ( - bitbucket.org/bertimus9/systemstat v0.5.0 // indirect - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/armon/go-metrics v0.3.10 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 // indirect + github.com/diegoholiveira/jsonlogic/v3 v3.2.7 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.2 // indirect + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 // indirect + github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 // indirect github.com/fatih/color v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.4.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.13.0 // indirect github.com/go-redis/redis/v7 v7.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gomodule/redigo v1.8.8 // indirect + github.com/gomodule/redigo v1.8.9 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/consul/api v1.9.1 // indirect + github.com/hashicorp/consul/api v1.20.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v0.12.0 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/hashicorp/go-hclog v0.14.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/golang-lru v0.5.0 // indirect - github.com/hashicorp/serf v0.9.5 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/leodido/go-urn v1.2.3 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect - github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect - github.com/mitchellh/reflectwalk v1.0.0 // indirect - github.com/pebbe/zmq4 v1.2.7 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/nats-io/nats.go v1.25.0 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect - github.com/spiffe/go-spiffe/v2 v2.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/spiffe/go-spiffe/v2 v2.1.4 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/errs v1.2.2 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + github.com/zeebo/errs v1.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/as-controller-board-status/go.sum b/as-controller-board-status/go.sum index c365f4a..937e397 100644 --- a/as-controller-board-status/go.sum +++ b/as-controller-board-status/go.sum @@ -1,336 +1,334 @@ -bitbucket.org/bertimus9/systemstat v0.5.0 h1:n0aLnh2Jo4nBUBym9cE5PJDG8GT6g+4VuS2Ya2jYYpA= -bitbucket.org/bertimus9/systemstat v0.5.0/go.mod h1:EkUWPp8lKFPMXP8vnbpT5JDI0W/sTiLZAvN8ONWErHY= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 h1:NAHCNOHtaaYnBt6pGtdW++xkFHuAavi2G7Y1OFNu17E= -github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9/go.mod h1:9STzWAIpeXT1gYFvw0JM+BkyMmPKYv/ztBNgXX4hAOw= -github.com/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= -github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 h1:C6ev04yPwmGGfqCcE3mScI5eWc8udLOAIoecV2CV2Vg= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0/go.mod h1:okglOXFO85xwM6bdwB6nMAigOB9wDc24MfcP0/UDYEU= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 h1:4UVNGRaKbkH5aEhQrto26Q65ydmhZYReRw/6ZNQ5J5E= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0/go.mod h1:JKRxVTC5g1IRoQuT6T7pW6O6XnfjQTZgFjEazPHAHng= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 h1:Sfi9jAIgRXZaJQw8Ji6+8//47D+iOyGiXQSNZXhy3HE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0/go.mod h1:jyfVSx7mI3u/o/oo10COxBRBvJ8O/9I3z2xAwPmNt/Q= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 h1:FdnA7hLq0U8PeMAIuJXt4KcXLAyGo7OjckzxTAwaoBc= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0/go.mod h1:+X6C0h8ZTJe+lLU2AGJfiAzCJK3zL+yM6cej9VC+79E= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 h1:Rqr1CgBXppAeehCkPAHQ6hjyLlm2KTR4IKiKpExm7gg= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0/go.mod h1:dQiOiga0KMGHXqFs4nI+Rp19hQR3gZ+3lDRgI9x5Q7M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7 h1:awX07pFPnlntZzRNBcO4a2Ivxa77NMt+narq/6xcS0E= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7/go.mod h1:9oE8z9G+0OMxOoLHF3fhek3KuqD5CBqM0B6XFL08MSg= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 h1:EclqSAArZtevlyyJu6TJXjWo6MS7OeQkdD/SOz11r+U= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1/go.mod h1:sgH/44+BsOXtqFnot5bkbyJlJzISD9jiuudKxgnCgmg= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 h1:gXVxaZPcRJl2MhCIK/GOXZnQL+21xOUpGDTLTcVCxSk= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1/go.mod h1:Or09TpF5HF3FjlqX3kJEFhBCsTvbHY0Nu28UF0MvB3w= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 h1:rdk8KMcU8fA6o9MCb0O68bboxZTdLiXTZByNttEtRwE= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0/go.mod h1:8RlYm5CPzZgUsfXDWVP1TIeUMhsDNIdRdj1HXdomtOI= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 h1:xjwCI34DLM31cSl1q9XmYgXS3JqXufQJMgohnLLLDx0= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0/go.mod h1:zzzWGWij6wAqm1go9TLs++TFMIsBqBb1eRnIj4mRxGw= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 h1:nU37Uo4/kloTMrdqDN9SJuDoXb3FpHaMdwVbHtn9PPk= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0/go.mod h1:x2CueD9gn/CmtCvDNFgrgBnR+B1iWJMSrC5+gesfDJ0= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 h1:6LXGElSScCCQzNpR3WjcgVz0RUc9GbfxETvif/4++iI= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0/go.mod h1:SGyo4fAHzOhDAd2Usa9RaBT/sOzkbceIqLrDG0+iYy8= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 h1:XyoDjeeVBMNwlJb6ljcTOl1QOp5gabcJc7pYSPYKNPA= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1/go.mod h1:Ts9l+TknRKaqFsXmrTuKyV1Y5qIr+eiexVYkQuXnfxk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.13.0 h1:cFRQdfaSMCOSfGCCLB20MHvuoHb/s5G8L5pu2ppK5AQ= +github.com/go-playground/validator/v10 v10.13.0/go.mod h1:dwu7+CG8/CtBiJFZDz4e+5Upb6OLw04gtBYw0mcG/z4= github.com/go-redis/redis/v7 v7.3.0 h1:3oHqd0W7f/VLKBxeYTEpqdMUsmMectngjM9OtoRoIgg= github.com/go-redis/redis/v7 v7.3.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomodule/redigo v1.8.8 h1:f6cXq6RRfiyrOJEV7p3JhLDlmawGBVBBP1MggY8Mo4E= -github.com/gomodule/redigo v1.8.8/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= +github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws= +github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/consul/api v1.9.1 h1:SngrdG2L62qqLsUz85qcPhFZ78rPf8tcD5qjMgs6MME= -github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 h1:t7sYxdPJZ2wjZgFpD+B+rx1Jk//5hkiEDW2ptwjhXAc= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0/go.mod h1:ov2jYqRbWFWuzgUGt6+LMiE+SBkUpI+qzgIWCipFlCo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= +github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 h1:DcITQwl3ymmg7i1XfwpZFs/TPv2PuTwxE8bnuKVtKlk= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54/go.mod h1:dIfpPVUR+ZfkzkDcKnn+oPW1jKeXe4WlNWc7rIXOVxM= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= +github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE= +github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pebbe/zmq4 v1.2.7 h1:6EaX83hdFSRUEhgzSW1E/SPoTS3JeYZgYkBvwdcrA9A= -github.com/pebbe/zmq4 v1.2.7/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/spiffe/go-spiffe/v2 v2.0.0 h1:y6N7BZAxgaFZYELyrIdxSMm2e2tWpzgQewUts9h1hfM= -github.com/spiffe/go-spiffe/v2 v2.0.0/go.mod h1:TEfgrEcyFhuSuvqohJt6IxENUNeHfndWCCV1EX7UaVk= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spiffe/go-spiffe/v2 v2.1.4 h1:Z31Ycaf2Z5DF38sQGmp+iGKjBhBlSzfAq68bfy67Mxw= +github.com/spiffe/go-spiffe/v2 v2.1.4/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= -github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/as-controller-board-status/main.go b/as-controller-board-status/main.go index 21dec30..b06dddb 100644 --- a/as-controller-board-status/main.go +++ b/as-controller-board-status/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -9,10 +9,10 @@ import ( "as-controller-board-status/routes" "os" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/transforms" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/transforms" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) const ( @@ -91,8 +91,14 @@ func (app *boardStatusAppService) CreateAndRunAppService(serviceKey string, newS app.boardStatus.MaxTemperatureThreshold = app.boardStatus.Configuration.MaxTemperatureThreshold app.boardStatus.MinTemperatureThreshold = app.boardStatus.Configuration.MinTemperatureThreshold + app.boardStatus.CommandClient = app.service.CommandClient() + if app.boardStatus.CommandClient == nil { + app.lc.Error("error command service missing from client's configuration") + return 1 + } + // Create the function pipeline to run when an event is read on the device channels - err = app.service.SetFunctionsPipeline( + err = app.service.SetDefaultFunctionsPipeline( transforms.NewFilterFor([]string{app.boardStatus.Configuration.DeviceName}).FilterByDeviceName, app.boardStatus.CheckControllerBoardStatus, ) @@ -110,9 +116,9 @@ func (app *boardStatusAppService) CreateAndRunAppService(serviceKey string, newS } // Tell the SDK to "start" and begin listening for events to trigger the pipeline - err = app.service.MakeItRun() + err = app.service.Run() if err != nil { - app.lc.Errorf("MakeItRun returned error: %s", err.Error()) + app.lc.Errorf("Run returned error: %s", err.Error()) return 1 } diff --git a/as-controller-board-status/res/configuration.toml b/as-controller-board-status/res/configuration.toml deleted file mode 100644 index e0267bd..0000000 --- a/as-controller-board-status/res/configuration.toml +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -[Writable] -LogLevel = 'INFO' - [Writable.InsecureSecrets] - [Writable.InsecureSecrets.DB] - path = "redisdb" - [Writable.InsecureSecrets.DB.Secrets] - username = "" - password = "" - - -[Service] -HealthCheckInterval = '10s' -Host = 'localhost' -Port = 48094 -ReadMaxLimit = 100 -StartupMsg = 'This EdgeX application service reads events from a controller board device service and propagates the information from the controller board to other services and API endpoints' -RequestTimeout = '30s' -MaxRequestSize = 0 -ServerBindAddr = "" -MaxResultCount = 0 - -[Registry] -Host = 'localhost' -Port = 8500 -Type = 'consul' - -[Trigger] -Type="edgex-messagebus" - [Trigger.EdgexMessageBus] - Type = "mqtt" - [Trigger.EdgexMessageBus.SubscribeHost] - Host = "localhost" - Port = 1883 - Protocol = "tcp" - SubscribeTopics="edgex/events/#" - [Trigger.EdgexMessageBus.Optional] - authmode = "none" - ClientId ="as-controller-board-status" - Qos = "0" # Quality of Sevice values are 0 (At most once), 1 (At least once) or 2 (Exactly once) - KeepAlive = "10" # Seconds (must be 2 or greater) - Retained = "false" - AutoReconnect = "true" - ConnectTimeout = "5" # Seconds - SkipCertVerify = "false" - -[Clients] - # Used for version check on start-up - # Also used for DeviceService, DeviceProfile and Device clients - [Clients.core-metadata] - Protocol = "http" - Host = "localhost" - Port = 59881 - - # Used for Notification and Subscription clients - [Clients.support-notifications] - Protocol = "http" - Host = "localhost" - Port = 59860 - -[ControllerBoardStatus] - AverageTemperatureMeasurementDuration = "-15s" - DeviceName = "controller-board" - MaxTemperatureThreshold = 83.0 - MinTemperatureThreshold = 10.0 - DoorStatusCommandEndpoint = "http://localhost:59882/api/v2/device/name/Inference-device/inferenceDoorStatus" - NotificationCategory = "HW_HEALTH" - NotificationEmailAddresses = "your-email@site.com" - NotificationLabels = "HW_HEALTH" - NotificationReceiver = "SystemAdministrator" - NotificationSender = "AutomatedCheckoutMaintenanceNotification" - NotificationSeverity = "CRITICAL" - NotificationName = "maintenance-notification" - NotificationSubscriptionMaxRESTRetries = 10 - NotificationSubscriptionRESTRetryIntervalDuration = "10s" - NotificationThrottleDuration = "1m" - SubscriptionAdminState = "UNLOCKED" - RESTCommandTimeoutDuration = "15s" - VendingEndpoint = "http://localhost:59860/boardStatus" diff --git a/as-controller-board-status/res/configuration.yaml b/as-controller-board-status/res/configuration.yaml new file mode 100644 index 0000000..2a15144 --- /dev/null +++ b/as-controller-board-status/res/configuration.yaml @@ -0,0 +1,46 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +Writable: + LogLevel: INFO + +Service: + Host: localhost + Port: 48094 + StartupMsg: This EdgeX application service reads events from a controller board device service and propagates the information from the controller board to other services and API endpoints + +Clients: + support-notifications: + Protocol: http + Host: localhost + Port: 59860 + + core-command: + Protocol: "http" + Host: "localhost" + Port: 59882 + +MessageBus: + Optional: + ClientId: as-controller-board-status + +ControllerBoardStatus: + AverageTemperatureMeasurementDuration: -15s + DeviceName: controller-board + MaxTemperatureThreshold: 83.0 + MinTemperatureThreshold: 10.0 + InferenceDeviceName: "Inference-device" + InferenceDoorStatusCmd: "inferenceDoorStatus" + NotificationCategory: HW_HEALTH + NotificationEmailAddresses: your-email@site.com + NotificationLabels: HW_HEALTH + NotificationReceiver: SystemAdministrator + NotificationSender: AutomatedVendingMaintenanceNotification + NotificationSeverity: CRITICAL + NotificationName: maintenance-notification + NotificationSubscriptionMaxRESTRetries: 10 + NotificationSubscriptionRESTRetryIntervalDuration: 10s + NotificationThrottleDuration: 1m + SubscriptionAdminState: UNLOCKED + RESTCommandTimeoutDuration: 15s + VendingEndpoint: http://localhost:59860/boardStatus diff --git a/as-controller-board-status/routes/controller.go b/as-controller-board-status/routes/controller.go index 4c87960..b4b788f 100644 --- a/as-controller-board-status/routes/controller.go +++ b/as-controller-board-status/routes/controller.go @@ -1,17 +1,17 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "fmt" "net/http" "as-controller-board-status/functions" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) type Controller struct { @@ -38,16 +38,17 @@ func (c *Controller) AddAllRoutes() error { } // GetStatus is a REST API endpoint that enables a web UI or some other downstream -// service to inquire about the status of the upstream Automated Checkout hardware interface(s). +// service to inquire about the status of the upstream Automated Vending hardware interface(s). func (c *Controller) GetStatus(writer http.ResponseWriter, req *http.Request) { - controllerBoardStatusJSON, err := utilities.GetAsJSON(c.boardStatus.ControllerBoardStatus) + controllerBoardStatus, err := json.Marshal(c.boardStatus.ControllerBoardStatus) if err != nil { - errMsg := "Failed to serialize the controller board's current state" - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) - c.lc.Errorf("%s: %s", errMsg, err.Error()) + errMsg := fmt.Sprintf("Failed to serialize the controller board's current state: %s", err.Error()) + c.lc.Error(errMsg) + + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } - - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, controllerBoardStatusJSON, false) c.lc.Info("GetStatus successfully!") + writer.Write(controllerBoardStatus) } diff --git a/as-controller-board-status/routes/controller_test.go b/as-controller-board-status/routes/controller_test.go index ee41054..18a3d3f 100644 --- a/as-controller-board-status/routes/controller_test.go +++ b/as-controller-board-status/routes/controller_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -8,15 +8,14 @@ import ( "as-controller-board-status/functions" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/http/httptest" "testing" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -110,9 +109,9 @@ func TestController_GetStatus(t *testing.T) { resp := w.Result() defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) assert.NoError(t, err) - responseContent := utilities.HTTPResponse{} + var responseContent functions.ControllerBoardStatus err = json.Unmarshal(body, &responseContent) assert.NoError(t, err) diff --git a/as-vending/.golangci.yml b/as-vending/.golangci.yml index b6f67b3..40eb688 100644 --- a/as-vending/.golangci.yml +++ b/as-vending/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: # timeout for analysis, e.g. 30s, 5m, default is 1m diff --git a/as-vending/Dockerfile b/as-vending/Dockerfile index 5c730cf..ba4feb9 100644 --- a/as-vending/Dockerfile +++ b/as-vending/Dockerfile @@ -1,14 +1,15 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -FROM golang:1.18-alpine3.16 AS builder +FROM golang:1.20-alpine3.17 AS builder LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' # add git for go modules -RUN apk update && apk add --no-cache make git gcc libc-dev zeromq-dev linux-headers +# hadolint ignore=DL3018 +RUN apk update && apk add --no-cache make git ENV GO111MODULE=on WORKDIR /usr/local/bin/ @@ -28,13 +29,12 @@ COPY . . RUN make gobuild # Next image - Copy built Go binary into new workspace -FROM alpine +FROM alpine:3.17 LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' -RUN apk --no-cache add zeromq -COPY --from=builder /usr/local/bin/as-vending/res/configuration.toml /res/configuration.toml +COPY --from=builder /usr/local/bin/as-vending/res/configuration.yaml /res/configuration.yaml COPY --from=builder /usr/local/bin/as-vending/main /as-vending CMD [ "/as-vending", "-cp=consul.http://edgex-core-consul:8500", "-r"] diff --git a/as-vending/LICENSE b/as-vending/LICENSE index 7c1aef1..df5d5be 100644 --- a/as-vending/LICENSE +++ b/as-vending/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/as-vending/Makefile b/as-vending/Makefile index 1dd58e3..2753296 100644 --- a/as-vending/Makefile +++ b/as-vending/Makefile @@ -1,9 +1,9 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build gobuild run gorun stop test lint -MICROSERVICE=automated-checkout/as-vending +MICROSERVICE=automated-vending/as-vending ARCH=$(shell uname -m) @@ -19,7 +19,7 @@ docker: . gobuild: tidy - CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a -installsuffix cgo main.go + CGO_ENABLED=0 GOOS=linux go build -ldflags='-s -w' -a main.go run: docker run \ @@ -34,10 +34,10 @@ stop: docker rm -f $(MICROSERVICE):latest test: - go test -tags no_zmq -test.v -cover -count=1 ./... + go test -test.v -cover -count=1 ./... testHTML: - go test -tags no_zmq -test.v -coverprofile=test_coverage.out ./... && \ + go test -test.v -coverprofile=test_coverage.out ./... && \ go tool cover -html=test_coverage.out lint: diff --git a/as-vending/config/configuration.go b/as-vending/config/configuration.go index 57f3436..05813db 100644 --- a/as-vending/config/configuration.go +++ b/as-vending/config/configuration.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package config diff --git a/as-vending/functions/models.go b/as-vending/functions/models.go index 3e079ee..9ee7120 100644 --- a/as-vending/functions/models.go +++ b/as-vending/functions/models.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions @@ -8,7 +8,7 @@ import ( "fmt" "time" - clientInterfaces "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/interfaces" + clientInterfaces "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/interfaces" ) // VendingState is a representation of the entire state of vending workflow. diff --git a/as-vending/functions/output.go b/as-vending/functions/output.go index 4ed512c..dc8f782 100644 --- a/as-vending/functions/output.go +++ b/as-vending/functions/output.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions @@ -9,14 +9,14 @@ import ( "encoding/json" "errors" "fmt" + "io" "net/http" "strconv" "time" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos" ) const ( @@ -110,16 +110,18 @@ func (vendingState *VendingState) HandleMqttDeviceReading(lc logger.LoggingClien return false, err } - defer resp.Body.Close() - lc.Info("Successfully updated the user's ledger") var currentLedger Ledger - _, err = utilities.ParseJSONHTTPResponseContent(resp.Body, ¤tLedger) + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) if err != nil { - return false, fmt.Errorf("Unable to unmarshal ledger response") + return false, fmt.Errorf("Failed to read response body: %s", err.Error()) + } + err = json.Unmarshal(body, ¤tLedger) + if err != nil { + return false, fmt.Errorf("Failed to unmarshal Ledger from response body: %s", err.Error()) } - // Display Ledger Total on LCD if displayErr := vendingState.displayLedger(lc, vendingState.Configuration.ControllerBoardDeviceName, currentLedger); displayErr != nil { return false, displayErr @@ -374,12 +376,16 @@ func (vendingState *VendingState) getCardAuthInfo(lc logger.LoggingClient, authE return } - defer resp.Body.Close() - var auth OutputData - _, err = utilities.ParseJSONHTTPResponseContent(resp.Body, &auth) + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + lc.Errorf("Failed to read response body from Authentication for card ID %s: %s", cardID, err.Error()) + return + } + err = json.Unmarshal(body, &auth) if err != nil { - lc.Errorf("Could not read response body from AuthenticationEndpoint: %v", err) + lc.Errorf("Could not unmarshal from AuthenticationEndpoint for card ID %s: %s", cardID, err.Error()) return } @@ -440,24 +446,24 @@ func (vendingState *VendingState) SendCommand(lc logger.LoggingClient, actionNam switch actionName { case http.MethodPut: - lc.Infof("executing %s action", actionName) - lc.Infof("Issuing SET command '%s' for device '%s'", commandName, deviceName) + lc.Debugf("executing %s action", actionName) + lc.Debugf("Issuing SET command '%s' for device '%s'", commandName, deviceName) response, err := vendingState.CommandClient.IssueSetCommandByName(context.Background(), deviceName, commandName, settings) if err != nil { return fmt.Errorf("failed to issue '%s' set command to '%s' device: %s", commandName, deviceName, err.Error()) } - lc.Infof("response status: %d", response.StatusCode) + lc.Debugf("response status: %d", response.StatusCode) case http.MethodGet: - lc.Infof("executing %s action", actionName) - lc.Infof("Issuing GET command '%s' for device '%s'", commandName, deviceName) - response, err := vendingState.CommandClient.IssueGetCommandByName(context.Background(), deviceName, commandName, "no", "yes") + lc.Debugf("executing %s action", actionName) + lc.Debugf("Issuing GET command '%s' for device '%s'", commandName, deviceName) + response, err := vendingState.CommandClient.IssueGetCommandByName(context.Background(), deviceName, commandName, false, true) if err != nil { return fmt.Errorf("failed to issue '%s' get command to '%s' device: %s", commandName, deviceName, err.Error()) } - lc.Infof("response status: %d", response.StatusCode) + lc.Debugf("response status: %d", response.StatusCode) default: return errors.New("Invalid action requested: " + actionName) diff --git a/as-vending/functions/output_test.go b/as-vending/functions/output_test.go index 22918ee..061c1c8 100644 --- a/as-vending/functions/output_test.go +++ b/as-vending/functions/output_test.go @@ -1,25 +1,25 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package functions import ( "as-vending/config" + "encoding/json" "errors" "fmt" + "github.com/stretchr/testify/require" "net/http" "net/http/httptest" "os" "testing" - client_mocks "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos/common" - "github.com/edgexfoundry/go-mod-core-contracts/v2/dtos/responses" - edgexError "github.com/edgexfoundry/go-mod-core-contracts/v2/errors" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" - + client_mocks "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos/common" + "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos/responses" + edgexError "github.com/edgexfoundry/go-mod-core-contracts/v3/errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) @@ -86,8 +86,12 @@ func TestGetCardAuthInfo(t *testing.T) { output := OutputData{ CardID: tc.cardID, } - authDataJSON, _ := utilities.GetAsJSON(output) - utilities.WriteJSONHTTPResponse(w, r, tc.statusCode, authDataJSON, false) + + authDataJSON, err := json.Marshal(output) + require.NoError(t, err) + + w.WriteHeader(tc.statusCode) + w.Write(authDataJSON) })) defer testServer.Close() @@ -176,23 +180,17 @@ func TestHandleMqttDeviceReading(t *testing.T) { LineTotal: 20.5, } - outputJSON, _ := utilities.GetAsJSON(output) + outputJSON, err := json.Marshal(output) + require.NoError(t, err) - writeError := false writeContentType := "json" if tc.Expected != nil { - writeError = true writeContentType = "string" } - httpResponse := utilities.HTTPResponse{ - Content: outputJSON, - ContentType: writeContentType, - StatusCode: tc.statusCode, - Error: writeError, - } - - httpResponse.WriteHTTPResponse(w, r) + w.WriteHeader(tc.statusCode) + w.Header().Set("Content-Type", writeContentType) + w.Write(outputJSON) })) // VendingState initialization @@ -290,8 +288,10 @@ func TestVerifyDoorAccess(t *testing.T) { output := OutputData{ RoleID: tc.RoleID, } - authDataJSON, _ := utilities.GetAsJSON(output) - utilities.WriteJSONHTTPResponse(w, r, http.StatusOK, authDataJSON, false) + + authDataJSON, err := json.Marshal(output) + require.NoError(t, err) + w.Write(authDataJSON) })) vendingState := VendingState{ diff --git a/as-vending/go.mod b/as-vending/go.mod index 1be190a..2164b87 100644 --- a/as-vending/go.mod +++ b/as-vending/go.mod @@ -1,74 +1,77 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module as-vending -go 1.18 +go 1.20 require ( - github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 - github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 - github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 - github.com/stretchr/testify v1.8.0 + github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 + github.com/stretchr/testify v1.8.4 ) require ( - bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 // indirect - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/armon/go-metrics v0.3.10 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 // indirect + github.com/diegoholiveira/jsonlogic/v3 v3.2.7 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.2 // indirect + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 // indirect + github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 // indirect github.com/fatih/color v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.4.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.13.0 // indirect github.com/go-redis/redis/v7 v7.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gomodule/redigo v1.8.8 // indirect + github.com/gomodule/redigo v1.8.9 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/consul/api v1.9.1 // indirect + github.com/hashicorp/consul/api v1.20.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v0.12.0 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/hashicorp/go-hclog v0.14.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/golang-lru v0.5.0 // indirect - github.com/hashicorp/serf v0.9.5 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/leodido/go-urn v1.2.3 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect - github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect - github.com/mitchellh/reflectwalk v1.0.0 // indirect - github.com/pebbe/zmq4 v1.2.7 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/nats-io/nats.go v1.25.0 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect - github.com/spiffe/go-spiffe/v2 v2.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/spiffe/go-spiffe/v2 v2.1.4 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/errs v1.2.2 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + github.com/zeebo/errs v1.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/as-vending/go.sum b/as-vending/go.sum index 2521773..937e397 100644 --- a/as-vending/go.sum +++ b/as-vending/go.sum @@ -1,336 +1,334 @@ -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 h1:N9r8OBSXAgEUfho3SQtZLY8zo6E1OdOMvelvP22aVFc= -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 h1:NAHCNOHtaaYnBt6pGtdW++xkFHuAavi2G7Y1OFNu17E= -github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9/go.mod h1:9STzWAIpeXT1gYFvw0JM+BkyMmPKYv/ztBNgXX4hAOw= -github.com/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= -github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 h1:C6ev04yPwmGGfqCcE3mScI5eWc8udLOAIoecV2CV2Vg= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0/go.mod h1:okglOXFO85xwM6bdwB6nMAigOB9wDc24MfcP0/UDYEU= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 h1:4UVNGRaKbkH5aEhQrto26Q65ydmhZYReRw/6ZNQ5J5E= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0/go.mod h1:JKRxVTC5g1IRoQuT6T7pW6O6XnfjQTZgFjEazPHAHng= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 h1:Sfi9jAIgRXZaJQw8Ji6+8//47D+iOyGiXQSNZXhy3HE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0/go.mod h1:jyfVSx7mI3u/o/oo10COxBRBvJ8O/9I3z2xAwPmNt/Q= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 h1:FdnA7hLq0U8PeMAIuJXt4KcXLAyGo7OjckzxTAwaoBc= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0/go.mod h1:+X6C0h8ZTJe+lLU2AGJfiAzCJK3zL+yM6cej9VC+79E= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 h1:Rqr1CgBXppAeehCkPAHQ6hjyLlm2KTR4IKiKpExm7gg= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0/go.mod h1:dQiOiga0KMGHXqFs4nI+Rp19hQR3gZ+3lDRgI9x5Q7M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7 h1:awX07pFPnlntZzRNBcO4a2Ivxa77NMt+narq/6xcS0E= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7/go.mod h1:9oE8z9G+0OMxOoLHF3fhek3KuqD5CBqM0B6XFL08MSg= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 h1:EclqSAArZtevlyyJu6TJXjWo6MS7OeQkdD/SOz11r+U= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1/go.mod h1:sgH/44+BsOXtqFnot5bkbyJlJzISD9jiuudKxgnCgmg= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 h1:gXVxaZPcRJl2MhCIK/GOXZnQL+21xOUpGDTLTcVCxSk= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1/go.mod h1:Or09TpF5HF3FjlqX3kJEFhBCsTvbHY0Nu28UF0MvB3w= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 h1:rdk8KMcU8fA6o9MCb0O68bboxZTdLiXTZByNttEtRwE= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0/go.mod h1:8RlYm5CPzZgUsfXDWVP1TIeUMhsDNIdRdj1HXdomtOI= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 h1:xjwCI34DLM31cSl1q9XmYgXS3JqXufQJMgohnLLLDx0= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0/go.mod h1:zzzWGWij6wAqm1go9TLs++TFMIsBqBb1eRnIj4mRxGw= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 h1:nU37Uo4/kloTMrdqDN9SJuDoXb3FpHaMdwVbHtn9PPk= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0/go.mod h1:x2CueD9gn/CmtCvDNFgrgBnR+B1iWJMSrC5+gesfDJ0= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 h1:6LXGElSScCCQzNpR3WjcgVz0RUc9GbfxETvif/4++iI= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0/go.mod h1:SGyo4fAHzOhDAd2Usa9RaBT/sOzkbceIqLrDG0+iYy8= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 h1:XyoDjeeVBMNwlJb6ljcTOl1QOp5gabcJc7pYSPYKNPA= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1/go.mod h1:Ts9l+TknRKaqFsXmrTuKyV1Y5qIr+eiexVYkQuXnfxk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.13.0 h1:cFRQdfaSMCOSfGCCLB20MHvuoHb/s5G8L5pu2ppK5AQ= +github.com/go-playground/validator/v10 v10.13.0/go.mod h1:dwu7+CG8/CtBiJFZDz4e+5Upb6OLw04gtBYw0mcG/z4= github.com/go-redis/redis/v7 v7.3.0 h1:3oHqd0W7f/VLKBxeYTEpqdMUsmMectngjM9OtoRoIgg= github.com/go-redis/redis/v7 v7.3.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomodule/redigo v1.8.8 h1:f6cXq6RRfiyrOJEV7p3JhLDlmawGBVBBP1MggY8Mo4E= -github.com/gomodule/redigo v1.8.8/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= +github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws= +github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/consul/api v1.9.1 h1:SngrdG2L62qqLsUz85qcPhFZ78rPf8tcD5qjMgs6MME= -github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 h1:t7sYxdPJZ2wjZgFpD+B+rx1Jk//5hkiEDW2ptwjhXAc= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0/go.mod h1:ov2jYqRbWFWuzgUGt6+LMiE+SBkUpI+qzgIWCipFlCo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= +github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 h1:DcITQwl3ymmg7i1XfwpZFs/TPv2PuTwxE8bnuKVtKlk= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54/go.mod h1:dIfpPVUR+ZfkzkDcKnn+oPW1jKeXe4WlNWc7rIXOVxM= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= +github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE= +github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pebbe/zmq4 v1.2.7 h1:6EaX83hdFSRUEhgzSW1E/SPoTS3JeYZgYkBvwdcrA9A= -github.com/pebbe/zmq4 v1.2.7/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/spiffe/go-spiffe/v2 v2.0.0 h1:y6N7BZAxgaFZYELyrIdxSMm2e2tWpzgQewUts9h1hfM= -github.com/spiffe/go-spiffe/v2 v2.0.0/go.mod h1:TEfgrEcyFhuSuvqohJt6IxENUNeHfndWCCV1EX7UaVk= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spiffe/go-spiffe/v2 v2.1.4 h1:Z31Ycaf2Z5DF38sQGmp+iGKjBhBlSzfAq68bfy67Mxw= +github.com/spiffe/go-spiffe/v2 v2.1.4/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= -github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/as-vending/main.go b/as-vending/main.go index b9a4aa7..5ae75f3 100644 --- a/as-vending/main.go +++ b/as-vending/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -10,10 +10,10 @@ import ( "as-vending/functions" "as-vending/routes" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/transforms" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/transforms" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) const ( @@ -102,7 +102,7 @@ func (app *vendingAppService) CreateAndRunAppService(serviceKey string, newServi } // create the function pipeline to run when an event is read on the device channels - err = app.service.SetFunctionsPipeline( + err = app.service.SetDefaultFunctionsPipeline( transforms.NewFilterFor([]string{app.vendingState.Configuration.CardReaderDeviceName, app.vendingState.Configuration.InferenceDeviceName}).FilterByDeviceName, app.vendingState.DeviceHelper, ) @@ -112,9 +112,9 @@ func (app *vendingAppService) CreateAndRunAppService(serviceKey string, newServi } // tell the SDK to "start" and begin listening for events to trigger the pipeline. - err = app.service.MakeItRun() + err = app.service.Run() if err != nil { - app.lc.Errorf("MakeItRun returned error: %s", err.Error()) + app.lc.Errorf("Run returned error: %s", err.Error()) return 1 } diff --git a/as-vending/res/configuration.toml b/as-vending/res/configuration.toml deleted file mode 100644 index 57eb97e..0000000 --- a/as-vending/res/configuration.toml +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -[Writable] -LogLevel = 'INFO' - [Writable.InsecureSecrets] - [Writable.InsecureSecrets.DB] - path = "redisdb" - [Writable.InsecureSecrets.DB.Secrets] - username = "" - password = "" - -[Service] -HealthCheckInterval = '10s' -Host = 'localhost' -Port = 48099 -StartupMsg = 'This is an Application Service which reads card inputs and publishes lock status back to message bus' -RequestTimeout = '30s' -MaxRequestSize = 0 -ServerBindAddr = "" -MaxResultCount = 0 - -[Registry] -Host = 'localhost' -Port = 8500 -Type = 'consul' - -[Trigger] -Type="edgex-messagebus" - [Trigger.EdgexMessageBus] - Type = "mqtt" - [Trigger.EdgexMessageBus.SubscribeHost] - Host = "localhost" - Port = 1883 - Protocol = "tcp" - SubscribeTopics="edgex/events/#" - [Trigger.EdgexMessageBus.Optional] - authmode = "none" - ClientId ="as-vending" - Qos = "0" # Quality of Sevice values are 0 (At most once), 1 (At least once) or 2 (Exactly once) - KeepAlive = "10" # Seconds (must be 2 or greater) - Retained = "false" - AutoReconnect = "true" - ConnectTimeout = "5" # Seconds - SkipCertVerify = "false" - -[Clients] - # Used for version check on start-up - # Also used for DeviceService, DeviceProfile and Device clients - [Clients.core-metadata] - Protocol = "http" - Host = "localhost" - Port = 59881 - - [Clients.core-command] - Protocol = "http" - Host = "localhost" - Port = 59882 - -[Vending] - AuthenticationEndpoint = "http://localhost:48096/authentication" - ControllerBoardDisplayResetCmd = "displayReset" - ControllerBoardDisplayRow0Cmd = "displayRow0" - ControllerBoardDisplayRow1Cmd = "displayRow1" - ControllerBoardDisplayRow2Cmd = "displayRow2" - ControllerBoardDisplayRow3Cmd = "displayRow3" - ControllerBoardLock1Cmd = "lock1" - ControllerBoardLock2Cmd = "lock2" - CardReaderDeviceName = "card-reader" - InferenceDeviceName = "Inference-device" - ControllerBoardDeviceName = "controller-board" - DoorCloseStateTimeoutDuration = "20s" - DoorOpenStateTimeoutDuration = "15s" - InferenceDoorStatusCmd = "inferenceDoorStatus" - InferenceHeartbeatCmd = "inferenceHeartbeat" - InferenceTimeoutDuration = "20s" - InventoryAuditLogService = "http://localhost:48095/auditlog" - InventoryService = "http://localhost:48095/inventory/delta" - LCDRowLength = 19 - LedgerService = "http://localhost:48093/ledger" \ No newline at end of file diff --git a/as-vending/res/configuration.yaml b/as-vending/res/configuration.yaml new file mode 100644 index 0000000..39d4084 --- /dev/null +++ b/as-vending/res/configuration.yaml @@ -0,0 +1,43 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +Writable: + LogLevel: INFO + +Service: + Host: localhost + Port: 48099 + StartupMsg: This microservice checks if ID numbers from REST requests are authenticated + +Clients: + core-command: + Protocol: "http" + Host: "localhost" + Port: 59882 + +MessageBus: + Optional: + ClientId: "as-vending" + +# Using default Trigger config from common config +Vending: + AuthenticationEndpoint: "http://localhost:48096/authentication" + ControllerBoardDisplayResetCmd: "displayReset" + ControllerBoardDisplayRow0Cmd: "displayRow0" + ControllerBoardDisplayRow1Cmd: "displayRow1" + ControllerBoardDisplayRow2Cmd: "displayRow2" + ControllerBoardDisplayRow3Cmd: "displayRow3" + ControllerBoardLock1Cmd: "lock1" + ControllerBoardLock2Cmd: "lock2" + CardReaderDeviceName : "card-reader" + InferenceDeviceName: "Inference-device" + ControllerBoardDeviceName: "controller-board" + DoorCloseStateTimeoutDuration: "20s" + DoorOpenStateTimeoutDuration: "15s" + InferenceDoorStatusCmd: "inferenceDoorStatus" + InferenceHeartbeatCmd: "inferenceHeartbeat" + InferenceTimeoutDuration: "20s" + InventoryAuditLogService: "http://localhost:48095/auditlog" + InventoryService: "http://localhost:48095/inventory/delta" + LCDRowLength: 19 + LedgerService: "http://localhost:48093/ledger" \ No newline at end of file diff --git a/as-vending/routes/controller.go b/as-vending/routes/controller.go index 865fe10..a2c5755 100644 --- a/as-vending/routes/controller.go +++ b/as-vending/routes/controller.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -11,9 +11,8 @@ import ( "net/http" "time" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) type Controller struct { @@ -55,8 +54,16 @@ func (c *Controller) AddAllRoutes() error { // GetMaintenanceMode will return a JSON response containing the boolean state // of the vendingState's maintenance mode. func (c *Controller) GetMaintenanceMode(writer http.ResponseWriter, req *http.Request) { - mm, _ := utilities.GetAsJSON(functions.MaintenanceMode{MaintenanceMode: c.vendingState.MaintenanceMode}) - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, mm, false) + + mm, err := json.Marshal(functions.MaintenanceMode{MaintenanceMode: c.vendingState.MaintenanceMode}) + if err != nil { + errMsg := fmt.Sprintf("failed to marshal requested state: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + return + } + writer.Write(mm) } func (c *Controller) errorAddRouteHandler(err error) error { @@ -137,10 +144,10 @@ func (c *Controller) BoardStatus(writer http.ResponseWriter, req *http.Request) c.vendingState.MaintenanceMode = true } - // Check to see if the board closed state is different than the previous state. If it is we need to update the state and + // Check to see if the board closed state is different from the previous state. If it is we need to update the state and // set the related properties. if c.vendingState.DoorClosed != boardStatus.DoorClosed { - c.lc.Errorf("Successfully updated the door event. Door closed: %v", boardStatus.DoorClosed) + c.lc.Infof("Successfully updated the door event. Door closed: %v", boardStatus.DoorClosed) returnval = string("Door closed change event was received ") status = http.StatusOK //FIXME: This is an issue c.vendingState.DoorClosed = boardStatus.DoorClosed diff --git a/as-vending/routes/controller_test.go b/as-vending/routes/controller_test.go index 326ddd9..2e41a6c 100644 --- a/as-vending/routes/controller_test.go +++ b/as-vending/routes/controller_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -9,13 +9,13 @@ import ( "bytes" "encoding/json" "fmt" + "io" "net/http" "net/http/httptest" "testing" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -92,10 +92,13 @@ func TestGetMaintenanceMode(t *testing.T) { // parse the response resp := w.Result() - _, err := utilities.ParseJSONHTTPResponseContent(resp.Body, &maintModeAPIResponse) + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + + err = json.Unmarshal(body, &maintModeAPIResponse) require.NoError(t, err) - defer resp.Body.Close() assert.Equal(t, maintModeAPIResponse, maintModeTrue, "Received a maintenance mode response that was different than anticipated") }) t.Run("TestGetMaintenanceMode MaintenanceMode=False", func(t *testing.T) { @@ -113,10 +116,12 @@ func TestGetMaintenanceMode(t *testing.T) { // parse the response resp := w.Result() - _, err := utilities.ParseJSONHTTPResponseContent(resp.Body, &maintModeAPIResponse) + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) require.NoError(t, err) - defer resp.Body.Close() + err = json.Unmarshal(body, &maintModeAPIResponse) + require.NoError(t, err) assert.Equal(t, maintModeAPIResponse, maintModeFalse, "Received a maintenance mode response that was different than anticipated") }) } diff --git a/docker-compose.ac.yml b/docker-compose.av.yml similarity index 67% rename from docker-compose.ac.yml rename to docker-compose.av.yml index a693992..9702a20 100644 --- a/docker-compose.ac.yml +++ b/docker-compose.av.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause networks: @@ -6,18 +6,17 @@ networks: driver: bridge services: ms-authentication: - container_name: automated-checkout_ms-authentication + container_name: automated-vending_ms-authentication depends_on: - data: + core-data: condition: service_started - command: + core-command: condition: service_started environment: EDGEX_SECURITY_SECRET_STORE: "false" - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: ms-authentication hostname: ms-authentication - image: automated-checkout/ms-authentication:dev + image: automated-vending/ms-authentication:dev networks: edgex-network: {} ports: @@ -31,16 +30,15 @@ services: options: { max-file: "5", max-size: 100m } user: 2002:2001 ms-inventory: - image: "automated-checkout/ms-inventory:dev" - container_name: automated-checkout_ms-inventory + image: "automated-vending/ms-inventory:dev" + container_name: automated-vending_ms-inventory depends_on: - data: + core-data: condition: service_started - command: + core-command: condition: service_started environment: EDGEX_SECURITY_SECRET_STORE: "false" - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: ms-inventory hostname: ms-inventory networks: @@ -58,16 +56,15 @@ services: options: { max-file: "5", max-size: 100m } user: "2000:2000" ms-ledger: - image: "automated-checkout/ms-ledger:dev" - container_name: automated-checkout_ms-ledger + image: "automated-vending/ms-ledger:dev" + container_name: automated-vending_ms-ledger depends_on: - data: + core-data: condition: service_started - command: + core-command: condition: service_started environment: EDGEX_SECURITY_SECRET_STORE: "false" - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: ms-ledger APPLICATIONSETTINGS_INVENTORYENDPOINT: "http://ms-inventory:48095/inventory" hostname: ms-ledger @@ -86,22 +83,17 @@ services: options: { max-file: "5", max-size: 100m } user: "2000:2000" ds-card-reader: - image: "automated-checkout/ds-card-reader:dev" - container_name: automated-checkout_ds-card-reader + image: "automated-vending/ds-card-reader:dev" + container_name: automated-vending_ds-card-reader depends_on: - data: + core-data: condition: service_started - command: + core-command: condition: service_started consul: condition: service_started environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata EDGEX_SECURITY_SECRET_STORE: "false" - MESSAGEQUEUE_HOST: edgex-mqtt-broker - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: ds-card-reader hostname: ds-card-reader networks: @@ -116,22 +108,17 @@ services: options: { max-file: "5", max-size: 100m } user: "2000:2000" ds-controller-board: - image: "automated-checkout/ds-controller-board:dev" - container_name: automated-checkout_ds-controller-board + image: "automated-vending/ds-controller-board:dev" + container_name: automated-vending-controller-board depends_on: - data: + core-data: condition: service_started - command: + core-command: condition: service_started consul: condition: service_started environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata EDGEX_SECURITY_SECRET_STORE: "false" - MESSAGEQUEUE_HOST: edgex-mqtt-broker - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: ds-controller-board hostname: ds-controller-board networks: @@ -146,14 +133,12 @@ services: options: { max-file: "5", max-size: 100m } user: "2000:2000" ds-cv-inference: - image: "automated-checkout/ds-cv-inference:dev" - container_name: automated-checkout_ds-cv-inference + image: "automated-vending/ds-cv-inference:dev" + container_name: automated-vending_ds-cv-inference command: ["/go/src/ds-cv-inference/images","mqtt-broker:1883","0.85","/go/src/ds-cv-inference/skumapping.json"] depends_on: mqtt-broker: condition: service_started - environment: - SERVICE_HOST: ds-cv-inference hostname: ds-cv-inference networks: edgex-network: {} @@ -167,24 +152,19 @@ services: options: { max-file: "5", max-size: 100m } user: "2000:2000" as-vending: - image: "automated-checkout/as-vending:dev" - container_name: automated-checkout_as-vending + image: "automated-vending/as-vending:dev" + container_name: automated-vending_as-vending depends_on: - data: + core-data: condition: service_started - command: + core-command: condition: service_started consul: condition: service_started environment: CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata EDGEX_SECURITY_SECRET_STORE: "false" - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: as-vending - TRIGGER_EDGEXMESSAGEBUS_PUBLISHHOST_HOST: mqtt-broker - TRIGGER_EDGEXMESSAGEBUS_SUBSCRIBEHOST_HOST: mqtt-broker VENDING_AUTHENTICATIONENDPOINT: http://ms-authentication:48096/authentication VENDING_INVENTORYAUDITLOGSERVICE: http://ms-inventory:48095/auditlog VENDING_INVENTORYSERVICE: http://ms-inventory:48095/inventory/delta @@ -202,26 +182,20 @@ services: options: { max-file: "5", max-size: 100m } user: "2000:2000" as-controller-board-status: - image: "automated-checkout/as-controller-board-status:dev" - container_name: automated-checkout_as-controller-board-status + image: "automated-vending/as-controller-board-status:dev" + container_name: automated-vending_as-controller-board-status depends_on: - data: + core-data: condition: service_started - command: + core-command: condition: service_started consul: condition: service_started environment: CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata CLIENTS_SUPPORT_NOTIFICATIONS_HOST: edgex-support-notifications EDGEX_SECURITY_SECRET_STORE: "false" - TRIGGER_EDGEXMESSAGEBUS_PUBLISHHOST_HOST: mqtt-broker - TRIGGER_EDGEXMESSAGEBUS_SUBSCRIBEHOST_HOST: mqtt-broker - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: as-controller-board-status - CONTROLLERBOARDSTATUS_DOORSTATUSCOMMANDENDPOINT: "http://edgex-core-command:59882/api/v2/device/name/Inference-device/inferenceDoorStatus" CONTROLLERBOARDSTATUS_VENDINGENDPOINT: "http://as-vending:48099/boardStatus" CONTROLLERBOARDSTATUS_MAXTEMPERATURETHRESHOLD: "83" CONTROLLERBOARDSTATUS_MINTEMPERATURETHRESHOLD: "10" diff --git a/docker-compose.edgex.yml b/docker-compose.edgex.yml index 337e145..bf2269d 100644 --- a/docker-compose.edgex.yml +++ b/docker-compose.edgex.yml @@ -1,4 +1,4 @@ -# Copyright © 2020-2022 Intel Corporation. All rights reserved. +# Copyright © 2020-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause networks: @@ -6,47 +6,61 @@ networks: driver: bridge services: consul: - command: agent -ui -bootstrap -server -client 0.0.0.0 + command: + - agent + - -ui + - -bootstrap + - -server + - -client + - 0.0.0.0 container_name: edgex-core-consul hostname: edgex-core-consul - image: consul:1.10.10 + image: hashicorp/consul:1.15.2 networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:8500:8500/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 8500 + published: "8500" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true user: root:root volumes: - - consul-config:/consul/config:z - - consul-data:/consul/data:z + - type: volume + source: consul-config + target: /consul/config + volume: {} + - type: volume + source: consul-data + target: /consul/data + volume: {} database: container_name: edgex-redis - environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata - CLIENTS_SUPPORT_NOTIFICATIONS_HOST: edgex-support-notifications - CLIENTS_SUPPORT_SCHEDULER_HOST: edgex-support-scheduler - DATABASES_PRIMARY_HOST: edgex-redis - EDGEX_SECURITY_SECRET_STORE: "false" - REGISTRY_HOST: edgex-core-consul hostname: edgex-redis - image: redis:6.2.6-alpine + image: redis:7.0.11-alpine networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:6379:6379/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 6379 + published: "6379" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true user: root:root volumes: - - db-data:/data:z - notifications: + - type: volume + source: db-data + target: /data + volume: {} + support-notifications: container_name: edgex-support-notifications depends_on: consul: @@ -54,175 +68,209 @@ services: database: condition: service_started environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata - CLIENTS_SUPPORT_NOTIFICATIONS_HOST: edgex-support-notifications - CLIENTS_SUPPORT_SCHEDULER_HOST: edgex-support-scheduler - DATABASES_PRIMARY_HOST: edgex-redis EDGEX_SECURITY_SECRET_STORE: "false" - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: edgex-support-notifications hostname: edgex-support-notifications - image: edgexfoundry/support-notifications:2.2.0 + image: edgexfoundry/support-notifications:3.0.0 networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:59860:59860/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 59860 + published: "59860" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true user: 2002:2001 - metadata: + core-metadata: container_name: edgex-core-metadata depends_on: consul: condition: service_started database: condition: service_started - notifications: - condition: service_started environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata - CLIENTS_SUPPORT_NOTIFICATIONS_HOST: edgex-support-notifications - CLIENTS_SUPPORT_SCHEDULER_HOST: edgex-support-scheduler - DATABASES_PRIMARY_HOST: edgex-redis EDGEX_SECURITY_SECRET_STORE: "false" - NOTIFICATIONS_SENDER: edgex-core-metadata - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: edgex-core-metadata hostname: edgex-core-metadata - image: edgexfoundry/core-metadata:2.2.0 + image: edgexfoundry/core-metadata:3.0.0 networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:59881:59881/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 59881 + published: "59881" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true user: 2002:2001 - data: + core-data: container_name: edgex-core-data depends_on: consul: condition: service_started - database: - condition: service_started - metadata: + core-metadata: condition: service_started - mqtt-broker: + database: condition: service_started environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata - CLIENTS_SUPPORT_NOTIFICATIONS_HOST: edgex-support-notifications - CLIENTS_SUPPORT_SCHEDULER_HOST: edgex-support-scheduler - DATABASES_PRIMARY_HOST: edgex-redis EDGEX_SECURITY_SECRET_STORE: "false" - MESSAGEQUEUE_AUTHMODE: none - MESSAGEQUEUE_HOST: edgex-mqtt-broker - MESSAGEQUEUE_OPTIONAL_CLIENTID: core-data - MESSAGEQUEUE_PORT: 1883 - MESSAGEQUEUE_PROTOCOL: tcp - MESSAGEQUEUE_TYPE: mqtt - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: edgex-core-data hostname: edgex-core-data - image: edgexfoundry/core-data:2.2.0 + image: edgexfoundry/core-data:3.0.0 networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:5563:5563/tcp - - 127.0.0.1:59880:59880/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 59880 + published: "59880" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true user: 2002:2001 - command: + core-command: container_name: edgex-core-command depends_on: consul: condition: service_started - database: + core-metadata: condition: service_started - metadata: + database: condition: service_started environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata - CLIENTS_SUPPORT_NOTIFICATIONS_HOST: edgex-support-notifications - CLIENTS_SUPPORT_SCHEDULER_HOST: edgex-support-scheduler - DATABASES_PRIMARY_HOST: edgex-redis EDGEX_SECURITY_SECRET_STORE: "false" - REGISTRY_HOST: edgex-core-consul + EXTERNALMQTT_URL: tcp://edgex-mqtt-broker:1883 SERVICE_HOST: edgex-core-command hostname: edgex-core-command - image: edgexfoundry/core-command:2.2.0 + image: edgexfoundry/core-command:3.0.0 networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:59882:59882/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 59882 + published: "59882" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true + user: 2002:2001 + core-common-config-bootstrapper: + container_name: edgex-core-common-config-bootstrapper + depends_on: + consul: + condition: service_started + environment: + ALL_SERVICES_DATABASE_HOST: edgex-redis + ALL_SERVICES_MESSAGEBUS_HOST: edgex-redis + ALL_SERVICES_REGISTRY_HOST: edgex-core-consul + APP_SERVICES_CLIENTS_CORE_METADATA_HOST: edgex-core-metadata + DEVICE_SERVICES_CLIENTS_CORE_METADATA_HOST: edgex-core-metadata + EDGEX_SECURITY_SECRET_STORE: "false" + hostname: edgex-core-common-config-bootstrapper + image: edgexfoundry/core-common-config-bootstrapper:3.0.0 + networks: + edgex-network: null + read_only: true + security_opt: + - no-new-privileges:true user: 2002:2001 mqtt-broker: - command: /usr/sbin/mosquitto -c /mosquitto-no-auth.conf + command: + - /usr/sbin/mosquitto + - -c + - /mosquitto-no-auth.conf container_name: edgex-mqtt-broker hostname: edgex-mqtt-broker - image: eclipse-mosquitto:2.0.14 + image: eclipse-mosquitto:2.0.15 networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:1883:1883/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 1883 + published: "1883" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true user: 2002:2001 device-mqtt: container_name: edgex-device-mqtt depends_on: - - consul - - data - - metadata - - mqtt-broker + consul: + condition: service_started + core-data: + condition: service_started + core-metadata: + condition: service_started + mqtt-broker: + condition: service_started environment: - CLIENTS_CORE_COMMAND_HOST: edgex-core-command - CLIENTS_CORE_DATA_HOST: edgex-core-data - CLIENTS_CORE_METADATA_HOST: edgex-core-metadata - CLIENTS_SUPPORT_NOTIFICATIONS_HOST: edgex-support-notifications - CLIENTS_SUPPORT_SCHEDULER_HOST: edgex-support-scheduler EDGEX_SECURITY_SECRET_STORE: "false" - MESSAGEQUEUE_HOST: edgex-mqtt-broker MQTTBROKERINFO_HOST: edgex-mqtt-broker - REGISTRY_HOST: edgex-core-consul SERVICE_HOST: edgex-device-mqtt - volumes: - - ./res/device-mqtt:/res + MQTTBROKERINFO_INCOMINGTOPIC: Inference/DataTopic/# + MQTTBROKERINFO_RESPONSETOPIC: Inference/ResponseTopic/# hostname: edgex-device-mqtt - image: edgexfoundry/device-mqtt:2.2.0 + image: edgexfoundry/device-mqtt:3.0.0 networks: - edgex-network: {} + edgex-network: null ports: - - 127.0.0.1:59982:59982/tcp + - mode: ingress + host_ip: 127.0.0.1 + target: 59982 + published: "59982" + protocol: tcp read_only: true restart: always security_opt: - - no-new-privileges:true + - no-new-privileges:true user: 2002:2001 - -version: '3.7' + volumes: + - ./res/device-mqtt/devices:/res/devices + - ./res/device-mqtt/profiles:/res/profiles + ui: + container_name: edgex-ui-go + environment: + EDGEX_SECURITY_SECRET_STORE: "false" + SERVICE_HOST: edgex-ui-go + hostname: edgex-ui-go + image: nexus3.edgexfoundry.org:10004/edgex-ui:3.0.0 + networks: + edgex-network: null + ports: + - mode: ingress + target: 4000 + published: "4000" + protocol: tcp + read_only: true + restart: always + security_opt: + - no-new-privileges:true + user: 2002:2001 + volumes: + - type: bind + source: /etc/localtime + target: /etc/localtime + read_only: true + bind: + create_host_path: true volumes: - consul-config: {} - consul-data: {} - db-data: {} - kuiper-data: {} + consul-config: + name: edgex_consul-config + consul-data: + name: edgex_consul-data + db-data: + name: edgex_db-data diff --git a/docker-compose.physical.card-reader.yml b/docker-compose.physical.card-reader.yml index 0fa84ef..94bf400 100644 --- a/docker-compose.physical.card-reader.yml +++ b/docker-compose.physical.card-reader.yml @@ -1,6 +1,6 @@ --- -# Copyright © 2020 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause version: '3.4' @@ -8,7 +8,7 @@ version: '3.4' services: ################################################################# -# Automated Checkout Microservices +# Automated Vending Microservices ################################################################# # this device service must be run as root to mount the device diff --git a/docker-compose.physical.controller-board.yml b/docker-compose.physical.controller-board.yml index 779ce1d..abf71f4 100644 --- a/docker-compose.physical.controller-board.yml +++ b/docker-compose.physical.controller-board.yml @@ -1,6 +1,6 @@ --- -# Copyright © 2020 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause version: '3.4' @@ -8,7 +8,7 @@ version: '3.4' services: ################################################################# -# Automated Checkout Microservices +# Automated Vending Microservices ################################################################# # this device service must be run as root to mount the device diff --git a/docker-compose.portainer.yml b/docker-compose.portainer.yml index 38293d0..9533374 100644 --- a/docker-compose.portainer.yml +++ b/docker-compose.portainer.yml @@ -1,13 +1,13 @@ -# Copyright © 2020 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -version: '3.4' +version: '3.7' volumes: portainer_data: services: portainer: - image: portainer/portainer + image: portainer/portainer-ce container_name: portainer ports: - "127.0.0.1:9000:9000" diff --git a/docs_src/automated-checkout-services/application_services.md b/docs_src/automated-vending-services/application_services.md similarity index 90% rename from docs_src/automated-checkout-services/application_services.md rename to docs_src/automated-vending-services/application_services.md index b9b6abb..939f885 100644 --- a/docs_src/automated-checkout-services/application_services.md +++ b/docs_src/automated-vending-services/application_services.md @@ -1,12 +1,12 @@ # Application Services -The **Automated Checkout** reference implementation utilizes two application services that are used to consume event data from the EdgeX framework. +The **Automated Vending** reference implementation utilizes two application services that are used to consume event data from the EdgeX framework. ## List of application services - Controller Board Status – Handles events coming from the controller board device service. -- Vending – The main business logic for the Automated Checkout application. This service handles events directly from the card reader device service and inference engine as well as coordinates data between each of the microservices. +- Vending – The main business logic for the Automated Vending application. This service handles events directly from the card reader device service and inference engine as well as coordinates data between each of the microservices. ## Controller board status application service @@ -118,7 +118,7 @@ If the `door_closed` property is different than what `as-vending` currently beli ### `POST`: `/resetDoorLock` -The `POST` call will simply reset the Automated Checkout's internal `vendingState`. This API endpoint has no logic to process any input data - it just responds to a simple `POST`. +The `POST` call will simply reset the Automated Vending's internal `vendingState`. This API endpoint has no logic to process any input data - it just responds to a simple `POST`. Simple usage example: diff --git a/docs_src/automated-checkout-services/device_services.md b/docs_src/automated-vending-services/device_services.md similarity index 76% rename from docs_src/automated-checkout-services/device_services.md rename to docs_src/automated-vending-services/device_services.md index bf99a48..9ab7877 100644 --- a/docs_src/automated-checkout-services/device_services.md +++ b/docs_src/automated-vending-services/device_services.md @@ -1,6 +1,6 @@ # Device Services -The **Automated Checkout** reference implementation utilizes three device services that are used to communicate hardware event data to underlying EdgeX framework. +The **Automated Vending** reference implementation utilizes three device services that are used to communicate hardware event data to underlying EdgeX framework. ## List of device services @@ -12,7 +12,7 @@ The **Automated Checkout** reference implementation utilizes three device servic ### Card reader description -The `ds-card-reader` device service is an EdgeX device service that allows a USB-based RFID card reader to grant access to the Automated Checkout. At a high level, this device service is responsible for discovering a specific card reader device, watching for input from that device, parsing that input, and then forwarding the input into the EdgeX framework. +The `ds-card-reader` device service is an EdgeX device service that allows a USB-based RFID card reader to read the user's card and grant access to the Automated Vending system. At a high level, this device service is responsible for discovering a specific card reader device, watching for input from that device, parsing that input, and then forwarding the input through the EdgeX framework to the ms-authentication service which authorizes/denies access to the Automated Vending. There are two different modes available to this device service: @@ -29,12 +29,12 @@ The `ds-card-reader` service is much simpler than the `ds-controller-board` serv --- -#### `PUT`: `http://localhost:48098/api/v2/device/name/card-reader/card-number` +#### `PUT`: `http://localhost:48098/api/v3/device/name/card-reader/card-number` The `PUT` API endpoint will push the badge ID (which is sent as part of the API request body) into the card reader device service. Once the card reader device service receives the badge ID, the badge ID will be pushed into the EdgeX bus for other application services to utilize. ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003278200"}' http://localhost:48098/api/v2/device/name/card-reader/card-number +curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003278200"}' http://localhost:48098/api/v3/device/name/card-reader/card-number ``` Sample response: @@ -48,12 +48,12 @@ Sample response: --- -#### `GET`: `http://localhost:48098/api/v2/device/name/card-reader/status` +#### `GET`: `http://localhost:48098/api/v3/device/name/card-reader/status` The `GET` API endpoint returns data that is not meant to be consumed for any particular purpose. When triggering this endpoint, it will execute a function (in the Go source code) called `CardReaderStatus` that is used as an auto-remediation mechanism to attempt to "grab" the physical card reader HID device (via [`evdev`](https://en.wikipedia.org/wiki/Evdev)). If it succeeds in grabbing the underlying device, that means that the `ds-card-reader` device service has lost its hold on the card reader, and we need to restart the service. This endpoint is meant to be hit frequently. ```bash -curl -X GET http://localhost:48098/api/v2/device/name/card-reader/status +curl -X GET http://localhost:48098/api/v3/device/name/card-reader/status ``` Sample response: @@ -95,41 +95,41 @@ Therefore, if you have multiple serial devices plugged into your system, please --- -#### `PUT`: `http://localhost:48097/api/v2/device/name/controller-board/lock1` +#### `PUT`: `http://localhost:48097/api/v3/device/name/controller-board/lock1` This `PUT` command will operate magnetic `lock1`. Depending on the numeric value of `lock1` (boolean `0/1`), the lock state will either be locked or unlocked. Simple usage example: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"lock1":"0"}' http://localhost:59882/api/v2/device/name/controller-board/lock1 +curl -X PUT -H "Content-Type: application/json" -d '{"lock1":"0"}' http://localhost:59882/api/v3/device/name/controller-board/lock1 ``` This will make the request directly to the device service itself instead of proxying through the EdgeX command API: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"lock1":"0"}' http://localhost:48097/api/v2/device/name/controller-board/lock1 +curl -X PUT -H "Content-Type: application/json" -d '{"lock1":"0"}' http://localhost:48097/api/v3/device/name/controller-board/lock1 ``` --- -#### `PUT`: `http://localhost:48097/api/v2/device/name/controller-board/lock2` +#### `PUT`: `http://localhost:48097/api/v3/device/name/controller-board/lock2` This `PUT` command will operate magnetic `lock2`. Depending on the numeric value of `lock2` (boolean `0/1`), the lock state will either be locked or unlocked. !!! note - Currently `lock2` has no purpose. During the initial architect/design phase of Automated Checkout, there were two locks. This was later reduced to a single mag-lock. + Currently `lock2` has no purpose. During the initial architect/design phase of Automated Vending, there were two locks. This was later reduced to a single mag-lock. Sample usage: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"lock2":"1"}' http://localhost:59882/api/v2/device/name/controller-board/lock2 +curl -X PUT -H "Content-Type: application/json" -d '{"lock2":"1"}' http://localhost:59882/api/v3/device/name/controller-board/lock2 ``` This will make the request directly to the device service itself instead of proxying through the EdgeX command API: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"lock2":"1"}' http://localhost:48097/api/v2/device/name/controller-board/lock2 +curl -X PUT -H "Content-Type: application/json" -d '{"lock2":"1"}' http://localhost:48097/api/v3/device/name/controller-board/lock2 ``` !!! success @@ -140,20 +140,20 @@ curl -X PUT -H "Content-Type: application/json" -d '{"lock2":"1"}' http://localh --- -#### `PUT`: `http://localhost:48097/api/v2/device/name/controller-board/displayRow0` +#### `PUT`: `http://localhost:48097/api/v3/device/name/controller-board/displayRow0` This `PUT` command will operate the display (LCD) and control the text to be put on the first line of the display. Simple usage : ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"displayRow0":"The Earth is round"}' http://localhost:59882/api/v2/device/name/controller-board/displayRow0 +curl -X PUT -H "Content-Type: application/json" -d '{"displayRow0":"The Earth is round"}' http://localhost:59882/api/v3/device/name/controller-board/displayRow0 ``` This will make the request directly to the device service itself instead of proxying through the EdgeX command API: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"displayRow0":"The Earth is round"}' http://localhost:48097/api/v2/device/name/controller-board/displayRow0 +curl -X PUT -H "Content-Type: application/json" -d '{"displayRow0":"The Earth is round"}' http://localhost:48097/api/v3/device/name/controller-board/displayRow0 ``` !!!info @@ -167,7 +167,7 @@ curl -X PUT -H "Content-Type: application/json" -d '{"displayRow0":"The Earth is --- -#### `PUT`: `http://localhost:48097/api/v2/device/name/controller-board/setTemperature` +#### `PUT`: `http://localhost:48097/api/v3/device/name/controller-board/setTemperature` This `PUT` command will emulate the temperature sensed by the controller board as a persistent value. @@ -177,13 +177,13 @@ This `PUT` command will emulate the temperature sensed by the controller board a Simple usage : ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"12.00"}' http://localhost:59882/api/v2/device/name/controller-board/setTemperature +curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"12.00"}' http://localhost:59882/api/v3/device/name/controller-board/setTemperature ``` This will make the request directly to the device service itself instead of proxying through the EdgeX command API: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"12.00"}' http://localhost:48097/api/v2/device/name/controller-board/setTemperature +curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"12.00"}' http://localhost:48097/api/v3/device/name/controller-board/setTemperature ``` !!! success @@ -194,7 +194,7 @@ curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"12.00"}' --- -#### `PUT`: `http://localhost:48097/api/v2/device/name/controller-board/setHumidity` +#### `PUT`: `http://localhost:48097/api/v3/device/name/controller-board/setHumidity` This `PUT` command will emulate the humidity sensed by the controller board as a persistent value. @@ -204,13 +204,13 @@ This `PUT` command will emulate the humidity sensed by the controller board as a Simple usage example: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setHumidity":"12"}' http://localhost:59882/api/v2/device/name/controller-board/setHumidity +curl -X PUT -H "Content-Type: application/json" -d '{"setHumidity":"12"}' http://localhost:59882/api/v3/device/name/controller-board/setHumidity ``` This will make the request directly to the device service itself instead of proxying through the EdgeX command API: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setHumidity":"12"}' http://localhost:48097/api/v2/device/name/controller-board/setHumidity +curl -X PUT -H "Content-Type: application/json" -d '{"setHumidity":"12"}' http://localhost:48097/api/v3/device/name/controller-board/setHumidity ``` !!! success @@ -221,7 +221,7 @@ curl -X PUT -H "Content-Type: application/json" -d '{"setHumidity":"12"}' http:/ --- -#### `PUT`: `http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed` +#### `PUT`: `http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed` This `PUT` command will emulate the "door-closed" state sensed by the controller board as a persistent value. @@ -231,13 +231,13 @@ This `PUT` command will emulate the "door-closed" state sensed by the controller Simple usage example: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:59882/api/v2/device/name/controller-board/setDoorClosed +curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:59882/api/v3/device/name/controller-board/setDoorClosed ``` This will make the request directly to the device service itself instead of proxying through the EdgeX command API: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed +curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed ``` !!! success @@ -265,34 +265,34 @@ The following picture illustrates the flow to calculate the inventory deltas bet

-The Automated Checkout architecture uses three MQTT topics: +The Automated Vending architecture uses three MQTT topics: | Topic | Description | | ----------------------------- | ------------------------------------------------------------------------------------------------ | -| Inference/CommandTopic | All events pushed from EdgeX's command API are fed into this topic. The [`as-vending`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) and [`as-controller-board-status`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-controller-board-status) are two services that make requests to this API, typically for making door close/open and heartbeat events. | -| Inference/ResponseTopic | The Automated Checkout cv inference service will respond to published messages on the `Inference/CommandTopic` topic on the `Inference/ResponseTopic` topic. | -| Inference/DataTopic | The cv inference service publishes delta SKUs on this topic, then the MQTT device service converts them into EdgeX event readings, and finally the [`as-vending`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) service processes the event readings and pushes them to downstream services. | +| Inference/CommandTopic | All events pushed from EdgeX's command API are fed into this topic. The [`as-vending`](https://github.com/intel-retail/automated-vending/tree/main/as-vending) and [`as-controller-board-status`](https://github.com/intel-retail/automated-vending/tree/main/as-controller-board-status) are two services that make requests to this API, typically for making door close/open and heartbeat events. | +| Inference/ResponseTopic | The Automated Vending cv inference service will respond to published messages on the `Inference/CommandTopic` topic on the `Inference/ResponseTopic` topic. | +| Inference/DataTopic | The cv inference service publishes delta SKUs on this topic, then the MQTT device service converts them into EdgeX event readings, and finally the [`as-vending`](https://github.com/intel-retail/automated-vending/tree/main/as-vending) service processes the event readings and pushes them to downstream services. | ### CV inference APIs --- -#### `GET`: `http://localhost:59982/api/v2/device/name/Inference-device/inferenceHeartbeat` +#### `GET`: `http://localhost:59982/api/v3/device/name/Inference-device/inferenceHeartbeat` -The `GET` call to the EdgeX MQTT device service's `inferenceHearbeat` command will act as a health-check for the Automated Checkout cv inference service. It must return `200 OK` upon swiping an RFID card in order for the vending workflow to begin. If it does not, the [`as-vending`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) service will enter maintenance mode. +The `GET` call to the EdgeX MQTT device service's `inferenceHearbeat` command will act as a health-check for the Automated Vending cv inference service. It must return `200 OK` upon swiping an RFID card in order for the vending workflow to begin. If it does not, the [`as-vending`](https://github.com/intel-retail/automated-vending/tree/main/as-vending) service will enter maintenance mode. Simple usage example: Through EdgeX command API: ```bash -curl -X GET http://localhost:59882/api/v2/device/name/Inference-device/inferenceHeartbeat +curl -X GET http://localhost:59882/api/v3/device/name/Inference-device/inferenceHeartbeat ``` To MQTT device service itself: ```bash -curl -X GET http://localhost:59982/api/v2/device/name/Inference-device/inferenceHeartbeat +curl -X GET http://localhost:59982/api/v3/device/name/Inference-device/inferenceHeartbeat ``` Sample response, `200 OK`: @@ -314,7 +314,7 @@ Sample response, `200 OK`: --- -#### `PUT`: `http://localhost:59982/api/v2/device/name/Inference-device/inferenceDoorStatus` +#### `PUT`: `http://localhost:59982/api/v3/device/name/Inference-device/inferenceDoorStatus` The `PUT` call to the EdgeX MQTT device service's `inferenceDoorStatus` command will cause the cv inference service to consume the message, and if the JSON `PUT` key `inferenceDoorStatus` has the string value `"true"`, an inference attempt will begin. The service will subsequently respond with a message containing the inventory delta (aka SKU delta). @@ -323,13 +323,13 @@ Simple usage example: Through EdgeX command API: ```bash -curl -X PUT -d '{"inferenceDoorStatus":"true"}' http://localhost:59882/api/v2/device/name/Inference-device/inferenceDoorStatus +curl -X PUT -d '{"inferenceDoorStatus":"true"}' http://localhost:59882/api/v3/device/name/Inference-device/inferenceDoorStatus ``` To MQTT device service itself: ```bash -curl -X PUT -d '{"inferenceDoorStatus":"true"}' http://localhost:59982/api/v2/device/name/Inference-device/inferenceDoorStatus +curl -X PUT -d '{"inferenceDoorStatus":"true"}' http://localhost:59982/api/v3/device/name/Inference-device/inferenceDoorStatus ``` !!! success diff --git a/docs_src/automated-checkout-services/micro_services.md b/docs_src/automated-vending-services/micro_services.md similarity index 89% rename from docs_src/automated-checkout-services/micro_services.md rename to docs_src/automated-vending-services/micro_services.md index a4930cc..0047ad7 100644 --- a/docs_src/automated-checkout-services/micro_services.md +++ b/docs_src/automated-vending-services/micro_services.md @@ -1,11 +1,11 @@ # Other Microservices -The Automated Checkout reference implementation utilizes three services that expose REST API endpoints. These three services handle business logic for the Automated Checkout reference implementation, and are somewhat generic in their design patterns, so for the purposes of the reference implementation, we simply refer to them "microservices". +The Automated Vending reference implementation utilizes three services that expose REST API endpoints. These three services handle business logic for the Automated Vending reference implementation, and are somewhat generic in their design patterns, so for the purposes of the reference implementation, we simply refer to them "microservices". ## List of microservices - [Authentication](#authentication-service) - Service that takes a card ID number and returns authentication/authorization status for the card number. -- [Inventory](#inventory-service) - Service that manages changes to the Automated Checkout's inventory, including storing transactions in an audit log. +- [Inventory](#inventory-service) - Service that manages changes to the Automated Vending's inventory, including storing transactions in an audit log. - [Ledger](#ledger-service) - Service that stores customer financial transactions. ## Authentication service @@ -16,14 +16,14 @@ The `ms-authentication` microservice is a service that works with EdgeX to expos This repository contains logic for working within the following schemas: -- _Card/Cards_ - swiping a card is what allows the Automated Checkout automation to proceed with its workflow. A card can be associated with one of 3 roles: +- _Card/Cards_ - swiping a card is what allows the Automated Vending automation to proceed with its workflow. A card can be associated with one of 3 roles: - Consumer - a typical customer; is expected to open the vending machine door, remove an item, close the door and be charged accordingly - Stocker - a person that is authorized to re-stock the vending machine with new products - Maintainer - a person that is authorized to fix the software/hardware - _Account/Accounts_ - represents a bank account to charge. Multiple people can be associated with an account, such as a married couple - _Person/People_ - a person can carry multiple cards but is only associated with one account -The [`ds-card-reader`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-card-reader) service is responsible for pushing card "swipe" events to the EdgeX framework, which will then feed into the [`as-vending`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) microservice that then performs a REST HTTP API call to this microservice. The response is processed by the [`as-vending`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) microservice and the workflow continues there. +The [`ds-card-reader`](https://github.com/intel-retail/automated-vending/tree/main/ds-card-reader) service is responsible for pushing card "swipe" events to the EdgeX framework, which will then feed into the [`as-vending`](https://github.com/intel-retail/automated-vending/tree/main/as-vending) microservice that then performs a REST HTTP API call to this microservice. The response is processed by the [`as-vending`](https://github.com/intel-retail/automated-vending/tree/main/as-vending) microservice and the workflow continues there. ### Authentication service APIs @@ -78,7 +78,7 @@ This repository contains logic for working within the following schemas: - `minRestockingLevel` - the minimum allowable number of units of this type to be stored in the vending machine - `createdAt` - the date the inventory item was created and catalogued - `updatedAt` - the date the inventory item was last updated (either via a transaction or something else) - - `isActive` - whether or not the inventory item is "active", which is not currently actively used by the Automated Checkout reference implementation for any specific purposes + - `isActive` - whether or not the inventory item is "active", which is not currently actively used by the Automated Vending reference implementation for any specific purposes - _Audit Log_ - an audit log entry contains the following attributes: - `cardId` - card number - `accountId` - account number @@ -88,7 +88,7 @@ This repository contains logic for working within the following schemas: - `createdAt` - the transaction date - `auditEntryId` - and a UUID representing the transaction itself uniquely -The `ms-inventory` microservice receives REST API calls from the upstream [`as-vending`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) application service during a typical vending workflow. Typically, an individual will swipe a card, the workflow will start, and the inventory will be manipulated after an individual has removed or added items to the vending machine and an inference has completed. REST API calls to this service are not locked behind any authentication mechanism. +The `ms-inventory` microservice receives REST API calls from the upstream [`as-vending`](https://github.com/intel-retail/automated-vending/tree/main/as-vending) application service during a typical vending workflow. Typically, an individual will swipe a card, the workflow will start, and the inventory will be manipulated after an individual has removed or added items to the vending machine and an inference has completed. REST API calls to this service are not locked behind any authentication mechanism. ### Inventory service APIs @@ -351,7 +351,7 @@ If the `{auditEntryId}` parameter does not correspond to an existing audit log e The `ms-ledger` microservice updates a ledger with the current transaction information (products purchased, quantity, total price, transaction timestamp). Transactions are added to the consumer's account. Transactions also have an `isPaid` attribute to designate which transactions have been paid/unpaid. -This microservice returns the current transaction to the [`as-vending`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) microservice, which then calls the [`ds-controller-board`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-controller-board) microservice to display the items purchased and the total price of the transaction on the LCD. +This microservice returns the current transaction to the [`as-vending`](https://github.com/intel-retail/automated-vending/tree/main/as-vending) microservice, which then calls the [`ds-controller-board`](https://github.com/intel-retail/automated-vending/tree/main/ds-controller-board) microservice to display the items purchased and the total price of the transaction on the LCD. ### Ledger service APIs diff --git a/docs_src/configuration.md b/docs_src/configuration.md index d6c191f..c005778 100644 --- a/docs_src/configuration.md +++ b/docs_src/configuration.md @@ -1,29 +1,13 @@ # Configuration -This page lists all of the relevant configuration parameters for each service in the Automated Checkout reference implementation. +This page lists all of the relevant configuration parameters for each service in the Automated Vending reference implementation. !!!info - Note that this document likely does not cover EdgeX-specific configuration parameters. Application and device service SDK documentation can be found in the [EdgeX Foundry GitHub repositories](https://github.com/edgexfoundry) or in the [official EdgeX documentation here](https://docs.edgexfoundry.org/2.2/). + Note that this document likely does not cover EdgeX-specific configuration parameters. Application and device service SDK documentation can be found in the [EdgeX Foundry GitHub repositories](https://github.com/edgexfoundry) or in the [official EdgeX documentation here](https://docs.edgexfoundry.org/3.0/). ## Environment overrides -The simplest way to change one of the configuration values described below is via the use of environment variable overrides in the docker compose file. The value of each configuration item in a service's configuration can be overridden with an environment variable specific to that item. The name of the environment variable is the path to the item in the configuration tree with underscores separating the nodes. The character case of each node in the environment variable name must match that found in the service's configuration. Here are a few examples for the `DriverConfig` section: - -```toml -[DriverConfig] - VID = "65535" # 0xFFFF - PID = "53" # 0x0035 -``` - -```yaml -Driver_VID: "256" ** Good ** -Driver_PID: "26" ** Good ** - -DRIVER_VID: "256" ** BAD ** -driver_pid: "26" ** BAD ** -``` - -These overrides are placed in the target service's environment section of the compose file. Here is an example: +The simplest way to change one of the service's configuration values described below is via the use of environment variable overrides in the docker compose file. The value of each configuration item in a service's configuration can be overridden with an environment variable specific to that item. The name of the environment variable is the path to the item in the configuration tree with underscores separating the nodes. The enviroment variable name is upper case version of the setting that found in the service's configuration. These overrides are placed in the target service's environment section of the compose file. Here is an example: ```yaml ds-card-reader: @@ -39,7 +23,7 @@ These overrides are placed in the target service's environment section of the co ## Card reader device service -The following items can be configured via the `DriverConfig` section of the service's [configuration.toml](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-card-reader/res/configuration.toml) file. All values are strings. +The following items can be configured via the `DriverConfig` section of the service's [configuration.yaml](https://github.com/intel-retail/automated-vending/blob/Edgex-3.0/ds-card-reader/res/configuration.yaml) file. All values are strings. - `DeviceSearchPath` - the bash globstar expression to use when searching for the raw input device, default is `/dev/input/event*` - `VID` - the `uint16` value (as a base-10 string) corresponding to the Vendor ID of the USB device (run `lsusb` to list VID and PID values of connected USB devices). For example, if the VID is `ffff` in the output of `lsusb`, it is `"65535"` in the configuration file @@ -48,7 +32,7 @@ The following items can be configured via the `DriverConfig` section of the serv ## Controller board device service -The following items can be configured via the `DriverConfig` section of the service's [configuration.toml](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-controller-board/res/configuration.toml) file. All values are strings. +The following items can be configured via the `DriverConfig` section of the service's [configuration.yaml](https://github.com/intel-retail/automated-vending/blob/Edgex-3.0/ds-controller-board/res/configuration.yaml) file. All values are strings. - `DisplayTimeout` - The value in seconds corresponding to the display timeout length before resetting the display to the status display. - `LockTimeout` - The value in seconds corresponding to the lock timeout used to automatically lock the door in case no lock command was sent @@ -58,19 +42,20 @@ The following items can be configured via the `DriverConfig` section of the serv ## EdgeX MQTT device service -This reference implementation uses the [MQTT Device Service](https://github.com/edgexfoundry/device-mqtt-go) from EdgeX with custom device profiles. These device profiles YAML files are located [here](https://github.com/intel-iot-devkit/automated-checkout/blob/master/res/device-mqtt/profiles/inference-mqtt-device-profile.yml) and are volume mounted into the device service's running Docker container. +This reference implementation uses the [MQTT Device Service](https://github.com/edgexfoundry/device-mqtt-go) from EdgeX with custom device profiles. These device profiles YAML files are located [here](https://github.com/intel-retail/automated-vending/tree/main/res/device-mqtt/profiles/inference-mqtt-device-profile.yml) and are volume mounted into the device service's running Docker container. -The following items can be configured via `MQTTBrokerInfo` section of the service's [configuration.toml](https://github.com/intel-iot-devkit/automated-checkout/blob/master/res/device-mqtt/configuration.toml) file. All values are strings. +The following `MQTTBrokerInfo` configuration items can be configured via `device-mqtt.environment` section of the service's [docker-compose.edgex.yml](https://github.com/intel-retail/automated-vending/tree/main/docker-compose.edgex.yml) file. -`MQTTBrokerInfo` +`MQTTBrokerInfo via device-mqtt.environment` -- `Schema` - Data schema type, aka protocol -- `Host` - Host name of the response MQTT Broker -- `Port` - Port number of the response MQTT Broker -- `Qos` - Quality of service agreement between sender and receiver -- `KeepAlive` - Keep alive duration for the response MQTT Broker -- `ClientId` - Client ID for the response MQTT Broker -- `ResponseTopic` - Subscribe topic for the response MQTT Broker +- `MQTTBROKERINFO_SCHEMA` - Data schema type, aka protocol +- `MQTTBROKERINFO_HOST` - Host name of the response MQTT Broker +- `MQTTBROKERINFO_PORT` - Port number of the response MQTT Broker +- `MQTTBROKERINFO_QOS` - Quality of service agreement between sender and receiver +- `MQTTBROKERINFO_KEEPALIVE` - Keep alive duration for the response MQTT Broker +- `MQTTBROKERINFO_CLIENTID` - Client ID for the response MQTT Broker +- `MQTTBROKERINFO_INCOMINGTOPIC` - Subscribe topic for incoming data from MQTT Broker +- `MQTTBROKERINFO_RESPONSETOPIC` - Subscribe topic for the response MQTT Broker ## CV inference device service @@ -101,7 +86,7 @@ Example: ## Controller board status application service -The following items can be configured via the `ControllerBoardStatus` section of the service's [configuration.toml](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-controller-board-status/res/configuration.toml) file. All values are strings. +The following items can be configured via the `ControllerBoardStatus` section of the service's [configuration.yaml](https://github.com/intel-retail/automated-vending/blob/Edgex-3.0/as-controller-board-status/res/configuration.yaml) file. All values are strings. - `AverageTemperatureMeasurementDuration` - The time-duration string (i.e. `-15s`, `-10m`) value of how long to process temperature measurements for calculating an average temperature. This calculation determines how quickly a "temperature threshold exceeded" notification is sent - `DeviceName` - The string name of the upstream EdgeX device that will be pushing events & readings to this application service @@ -112,7 +97,7 @@ The following items can be configured via the `ControllerBoardStatus` section of - `NotificationEmailAddresses` - A comma-separated values (CSV) string of emails to send notifications to - `NotificationLabels` - A comma-separated values (CSV) string of labels to apply to notifications, which are handled by EdgeX - `NotificationReceiver` - The human-readable string name of the person/entity receiving the notification, such as `System Administrator` -- `NotificationSender` - The human-readable string name of the person/entity sending the notification, such as `Automated Checkout Maintenance Notification` +- `NotificationSender` - The human-readable string name of the person/entity sending the notification, such as `Automated Vending Maintenance Notification` - `NotificationSeverity` - A string tag indicating the severity of the notification, such as `CRITICAL` - `NotificationName` - A string that is a short label that may be used as part of a URL to delineate the notification subscription, such as `sys-admin`. The EdgeX official documentation says, _"Effectively a name or key that labels the notification"_. - `NotificationSubscriptionMaxRESTRetries` - The integer value that represents the maximum number of times to try creating a subscription in the EdgeX notification service, such as `10` @@ -124,7 +109,7 @@ The following items can be configured via the `ControllerBoardStatus` section of ## Vending application service -The following items can be configured via the `ApplicationSettings` section of the service's [configuration.toml](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending/res/configuration.toml) file. All values are strings. +The following items can be configured via the `ApplicationSettings` section of the service's [configuration.yaml](https://github.com/intel-retail/automated-vending/blob/Edgex-3.0/as-vending/res/configuration.yaml) file. All values are strings. - `AuthenticationEndpoint` - Endpoint for authentication microservice - `ControllerBoarddisplayResetCmd` - EdgeX Command service command for Resetting the LCD text @@ -157,6 +142,6 @@ For this particular microservice, there are no specific configuration options. F ## Ledger microservice -The following items can be configured via the `[ApplicationSettings]` section of the service's [configuration.toml](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-ledger/res/configuration.toml) file. All values are strings. +The following items can be configured via the `[ApplicationSettings]` section of the service's [configuration.yaml](https://github.com/intel-retail/automated-vending/blob/Edgex-3.0/ms-ledger/res/configuration.yaml) file. All values are strings. - `InventoryEndpoint` - Endpoint that correlates to the Inventory microservice. This is used to query Inventory data used to generate the ledgers. diff --git a/docs_src/events.md b/docs_src/events.md index 9a0c8d3..e56d930 100644 --- a/docs_src/events.md +++ b/docs_src/events.md @@ -1,10 +1,10 @@ -# Automated Checkout Events +# Automated Vending Events -The following are the different events used in the Automated Checkout reference implementation. +The following are the different events used in the Automated Vending reference implementation. ## Card reader events -[`ds-card-reader`](./automated-checkout-services/device_services.md#card-reader) uses the EdgeX events pattern to send the card information into EdgeX Core Data as well as maintain a healthy state. +[`ds-card-reader`](./automated-vending-services/device_services.md#card-reader) uses the EdgeX events pattern to send the card information into EdgeX Core Data as well as maintain a healthy state. `card-number` is an asynchronous event sent when a card is scanned by the card reader device. The event reading value is a string containing a 10-digit number and is placed into EdgeX Core Data as an event reading. @@ -16,7 +16,7 @@ The following are the different events used in the Automated Checkout reference ## Controller board events -[`ds-controller-board`](./automated-checkout-services/device_services.md#controller-board) uses the EdgeX events pattern to send the card information into EdgeX Core Data. +[`ds-controller-board`](./automated-vending-services/device_services.md#controller-board) uses the EdgeX events pattern to send the card information into EdgeX Core Data. `controller-board-status` is an auto-event used to send the current state of the controller board and all of its periferals to EdgeX Core Data. This data is used by the as-controller-board-status application service to determine the state of the system. The information included in the status are the door lock states, door state, temperature, and humidity. The EdgeX Reading value is a string containing the following JSON: @@ -30,7 +30,7 @@ The following are the different events used in the Automated Checkout reference } ``` -The following commands are also available to the ds-controller-board. More details can be found [`here`](./automated-checkout-services/device_services.md#controller-board). +The following commands are also available to the ds-controller-board. More details can be found [`here`](./automated-vending-services/device_services.md#controller-board). - `lock1` - `lock2` @@ -44,7 +44,7 @@ The following commands are also available to the ds-controller-board. More detai ## Computer vision inference events -The [`ds-cv-inference`](./automated-checkout-services/device_services.md#cv-inference) uses the EdgeX MQTT Device Service to send status updates and inference deltas to the EdgeX Core Data. The MQTT device service profile can be found in the file `./res/device-mqtt/profile/inference-mqtt-device-profile.yml`, in the root of this GitHub repository. +The [`ds-cv-inference`](./automated-vending-services/device_services.md#cv-inference) uses the EdgeX MQTT Device Service to send status updates and inference deltas to the EdgeX Core Data. The MQTT device service profile can be found in the file `./res/device-mqtt/profile/inference-mqtt-device-profile.yml`, in the root of this GitHub repository. `inferenceHeartbeat` is an asynchronous event that is pushed to EdgeX Core Data when the inference is pinged by another service to verify it is functioning. If the inference is working properly the `inferencePong` response is sent as the event reading. @@ -63,4 +63,4 @@ The [`ds-cv-inference`](./automated-checkout-services/device_services.md#cv-infe ] ``` -Finally the `inferenceDoorStatus` command is defined by the custom device profile for the EdgeX MQTT Device Service which sends the ping request to the CV inference service. More details can be found [here](./automated-checkout-services/device_services.md#cv-inference). +Finally the `inferenceDoorStatus` command is defined by the custom device profile for the EdgeX MQTT Device Service which sends the ping request to the CV inference service. More details can be found [here](./automated-vending-services/device_services.md#cv-inference). diff --git a/docs_src/images/automated-checkout-reference-implementation.png b/docs_src/images/automated-vending-reference-implementation.png similarity index 100% rename from docs_src/images/automated-checkout-reference-implementation.png rename to docs_src/images/automated-vending-reference-implementation.png diff --git a/docs_src/images/automated-checkout.png b/docs_src/images/automated-vending.png similarity index 100% rename from docs_src/images/automated-checkout.png rename to docs_src/images/automated-vending.png diff --git a/docs_src/index.md b/docs_src/index.md index 6eef4c2..ff88a17 100644 --- a/docs_src/index.md +++ b/docs_src/index.md @@ -1,33 +1,33 @@ -# Automated Checkout Reference Implementation +# Automated Vending Reference Implementation ## Introduction -This guide helps you build and run the Automated Checkout Reference Implementation. +This guide helps you build and run the Automated Vending Reference Implementation. Upon completing the steps in this guide, you will be ready to integrate sensors and services to build your own complete solution. !!! info - This guide does not create a complete, ready-to-use solution. Instead, upon completing the steps in this guide, you will be ready to integrate sensors and services to build your own Automated Checkout solution. + This guide does not create a complete, ready-to-use solution. Instead, upon completing the steps in this guide, you will be ready to integrate sensors and services to build your own Automated Vending solution. Certain third-party software or hardware identified in this document only may be used upon securing a license directly from the third-party software or hardware owner. The identification of non-Intel software, tools, or services in this document does not constitute a sponsorship, endorsement, or warranty by Intel.

- +

### Block diagram -The high-level diagram below shows the sensors and services used with the Automated Checkout Reference Implementation. The diagram shows the sensors and services, and how they communicate through EdgeX. Intel provides the services outlined in blue, the purple services are provided by EdgeX, and the black services are either simulated or can interface with real hardware. +The high-level diagram below shows the sensors and services used with the Automated Vending Reference Implementation. The diagram shows the sensors and services, and how they communicate through EdgeX. Intel provides the services outlined in blue, the purple services are provided by EdgeX, and the black services are either simulated or can interface with real hardware. -![Automated Checkout Reference Implementation Diagram](./images/automated-checkout-reference-implementation.png) +![Automated Vending Reference Implementation Diagram](./images/automated-vending-reference-implementation.png) ### Prerequisites -The following items are required to build the Automated Checkout Reference Implementation. You will need additional hardware and software when you are ready to build your own solution. +The following items are required to build the Automated Vending Reference Implementation. You will need additional hardware and software when you are ready to build your own solution. -- **A deep learning model for CV inferencing.** Intel provides a reference inference service using openVINO that produces inventory changes based on preloaded images. See [cv inference service](./automated-checkout-services/device_services.md#cv-inference) for information on this process. -- **A device that allows badging-in to the Automated Checkout.** Intel provides a card reader service that can be simulated or integrated with a physical USB device. See the [Card Reader](./automated-checkout-services/device_services.md#card-reader) device service page for information on this service. -- **A controller device that locks the door to the Automated Checkout**, as well as providing readouts (such as a small text-based LCD screen) to display authorization state, items purchased, and other sensor readings. This could be an Arduino-powered circuit. Intel provides a display service that can run in a simulated mode or with a physical USB/serial interface. See the [Controller Board](./automated-checkout-services/device_services.md#controller-board) device service page for implementation details. +- **A deep learning model for CV inferencing.** Intel provides a reference inference service using openVINO that produces inventory changes based on preloaded images. See [cv inference service](./automated-vending-services/device_services.md#cv-inference) for information on this process. +- **A device that allows badging-in to the Automated Vending.** Intel provides a card reader service that can be simulated or integrated with a physical USB device. See the [Card Reader](./automated-vending-services/device_services.md#card-reader) device service page for information on this service. +- **A controller device that locks the door to the Automated Vending**, as well as providing readouts (such as a small text-based LCD screen) to display authorization state, items purchased, and other sensor readings. This could be an Arduino-powered circuit. Intel provides a display service that can run in a simulated mode or with a physical USB/serial interface. See the [Controller Board](./automated-vending-services/device_services.md#controller-board) device service page for implementation details. - Ubuntu 20.04.5 - Docker @@ -52,21 +52,21 @@ Additionally, frequently throughout this documentation, we will refer to a "cool ### Recommended domain knowledge -- EdgeX - the Automated Checkout reference implementation utilizes the EdgeX framework +- EdgeX - the Automated Vending reference implementation utilizes the EdgeX framework - MQTT - REST - evdev, if reading input events from a USB input device, such as a card reader that inputs key strokes upon scanning a card - Communication over serial on Linux, if using serial devices such as Arduino - Computer Vision concepts, if using CV inferencing components - Basic RFID concepts, if using RFID components (i.e. for badge-in card reader) -- Portainer - included with the Automated Checkout reference implementation. Usage is optional, but this is a highly recommended utility for managing Docker containers, and we provide easy ways to run it. +- Portainer - included with the Automated Vending reference implementation. Usage is optional, but this is a highly recommended utility for managing Docker containers, and we provide easy ways to run it. ## Getting started ### Step 1: Clone the repository ```bash -git clone https://github.com/intel-iot-devkit/automated-checkout.git && cd ./automated-checkout +git clone https://github.com/intel-retail/automated-vending.git && cd ./automated-vending ``` ### Step 2: Build the reference implementation @@ -85,20 +85,20 @@ make docker Make sure the command was successful. To do so, run: ```bash -docker images | grep automated-checkout +docker images | grep automated-vending ``` !!! success The results are: - - `automated-checkout/as-controller-board-status` - - `automated-checkout/as-vending` - - `automated-checkout/ds-card-reader` - - `automated-checkout/ds-controller-board` - - `automated-checkout/ds-cv-inference` - - `automated-checkout/ms-authentication` - - `automated-checkout/ms-inventory` - - `automated-checkout/ms-ledger` + - `automated-vending/as-controller-board-status` + - `automated-vending/as-vending` + - `automated-vending/ds-card-reader` + - `automated-vending/ds-controller-board` + - `automated-vending/ds-cv-inference` + - `automated-vending/ms-authentication` + - `automated-vending/ms-inventory` + - `automated-vending/ms-ledger` !!! failure If you do not see all of the above docker images, look through the console output for errors. Sometimes dependencies fail to resolve and must be run again. Address obvious issues. To try again, repeat step 2. @@ -111,7 +111,7 @@ Use Docker Compose to start the reference implementation suite. To do so, run: make run ``` -This command starts the EdgeX Device Services and then starts all the Automated Checkout Reference Implementation Services. +This command starts the EdgeX Device Services and then starts all the Automated Vending Reference Implementation Services. #### Check for success @@ -126,22 +126,22 @@ docker ps --format 'table{{.Image}}\t{{.Status}}' | IMAGE | STATUS | |------------------------------------------------------|-------------------| - | automated-checkout/ms-ledger:dev | Up 53 seconds | - | eclipse-mosquitto:2.0.14 | Up 52 seconds | - | automated-checkout/as-vending:dev | Up 52 seconds | - | automated-checkout/ms-inventory:dev | Up 52 seconds | - | automated-checkout/ds-controller-board:dev | Up 52 seconds | - | automated-checkout/ms-authentication:dev | Up 55 seconds | - | edgexfoundry/device-mqtt:2.2.0 | Up 53 seconds | - | automated-checkout/ds-card-reader:dev | Up 53 seconds | - | automated-checkout/as-controller-board-status:dev | Up 52 seconds | - | edgexfoundry/core-command:2.2.0 | Up About a minute | - | edgexfoundry/core-data:2.2.0 | Up About a minute | - | edgexfoundry/core-metadata:2.2.0 | Up About a minute | - | edgexfoundry/support-notifications:2.2.0 | Up About a minute | - | edgexfoundry/consul:1.10.10 | Up About a minute | - | automated-checkout/ds-cv-inference:dev | Up 51 seconds | - | redis:6.2-alpine | Up About a minute | + | automated-vending/ms-ledger:dev | Up 53 seconds | + | eclipse-mosquitto:2.0.15 | Up 52 seconds | + | automated-vending/as-vending:dev | Up 52 seconds | + | automated-vending/ms-inventory:dev | Up 52 seconds | + | automated-vending/ds-controller-board:dev | Up 52 seconds | + | automated-vending/ms-authentication:dev | Up 55 seconds | + | edgexfoundry/device-mqtt:3.0.0 | Up 53 seconds | + | automated-vending/ds-card-reader:dev | Up 53 seconds | + | automated-vending/as-controller-board-status:dev | Up 52 seconds | + | edgexfoundry/core-command:3.0.0 | Up About a minute | + | edgexfoundry/core-data:3.0.0 | Up About a minute | + | edgexfoundry/core-metadata:3.0.0 | Up About a minute | + | edgexfoundry/support-notifications:3.0.0 | Up About a minute | + | edgexfoundry/consul:1.15.2 | Up About a minute | + | automated-vending/ds-cv-inference:dev | Up 51 seconds | + | redis:7.0.11-alpine | Up About a minute | You can also use Portainer to check the status of the services. You must run Portainer service first: @@ -155,15 +155,15 @@ Then, navigate to the following Portainer URL and create an admin account: http://127.0.0.1:9000

-After, navigate to the following URL to list all of the containers running under the `automated-checkout` stack: +After, navigate to the following URL to list all of the containers running under the `automated-vending` stack:

- http://127.0.0.1:9000/#/stacks/automated-checkout?type=2&external=true + http://127.0.0.1:9000/#/stacks/automated-vending?type=2&external=true

### Step 4: Dive in -All of the core components of Automated Checkout are up and running, and you are ready to begin going through the following phases. +All of the core components of Automated Vending are up and running, and you are ready to begin going through the following phases. - [Phase 1](./phases/phase1.md) - Simulate data and inferencing, and simulate events - [Phase 2](./phases/phase2.md) - Add Card Reader Device @@ -171,26 +171,26 @@ All of the core components of Automated Checkout are up and running, and you are ## General Guidance -After completing the steps in the Getting Started section, it may be helpful to read through the remainder of this document for some further guidance on the Automated Checkout reference implementation. +After completing the steps in the Getting Started section, it may be helpful to read through the remainder of this document for some further guidance on the Automated Vending reference implementation. ### How to use the Compose Files -The docker-compose files are segmented to allow for fine control of physical and simulated devices, as well as allowing you the choice of running Portainer. Use the [`makefile`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/Makefile) to manage the various compose files: +The docker-compose files are segmented to allow for fine control of physical and simulated devices, as well as allowing you the choice of running Portainer. Use the [`makefile`](https://github.com/intel-retail/automated-vending/tree/main/Makefile) to manage the various compose files: | Compose file | Purpose | Makefile Command | |---------------------------|-------------------------------------------------|--------------------------------------| | Portainer | Container management | `make run-portainer` | -| All Services (simulated) | Automated Checkout and EdgeX services | `make run` | +| All Services (simulated) | Automated Vending and EdgeX services | `make run` | | Physical Environment | Mounts physical devices | `make run-physical` | | Physical Card Reader | Allows just the card reader to be physical | `make run-physical-card-reader` | | Physical Controller Board | Allows just the controller board to be physical | `make run-physical-controller-board` | ### Expanding the Reference Implementation -The reference implementation you created is not a complete solution. It provides the base components for creating a framework to run a CV-powered Automated Checkout. It is your choice on how many and which sensors and devices to include. This section provides information about components you might want to include or replace. +The reference implementation you created is not a complete solution. It provides the base components for creating a framework to run a CV-powered Automated Vending. It is your choice on how many and which sensors and devices to include. This section provides information about components you might want to include or replace. | Component | Description | |----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | RFID card reader | A card reader device service is provided for a USB based RFID card reader. As an alternative, you can also use a regular USB keyboard to enter 10-digit number. See *[Phase 2 - Add Card Reader Device](./phases/phase2.md)* for more information. | -| Micro-controller board | A controller board device service is provided for an Arduino based micro-controller. This micro-controller is in charge of controlling the locks of the automated checkout door and the LED display. Also, it uses modules such as temperature and humidity. See *[Phase 3 - Bring Your Own Hardware and Software](./phases/phase3.md)* for more information. | -| Deep learning model | The Automated Checkout reference implementation provides a computer vision inference service using openVINO inference engine and openVINO product detection model for demonstration purposes. See more information [here](./automated-checkout-services/device_services.md#cv-inference). You can create your own service and send events to EdgeX using the [EdgeX MQTT Device Service](https://github.com/edgexfoundry/device-mqtt-go). | +| Micro-controller board | A controller board device service is provided for an Arduino based micro-controller. This micro-controller is in charge of controlling the locks of the automated vending door and the LED display. Also, it uses modules such as temperature and humidity. See *[Phase 3 - Bring Your Own Hardware and Software](./phases/phase3.md)* for more information. | +| Deep learning model | The Automated Vending reference implementation provides a computer vision inference service using openVINO inference engine and openVINO product detection model for demonstration purposes. See more information [here](./automated-vending-services/device_services.md#cv-inference). You can create your own service and send events to EdgeX using the [EdgeX MQTT Device Service](https://github.com/edgexfoundry/device-mqtt-go). | diff --git a/docs_src/modifying_source_code.md b/docs_src/modifying_source_code.md index 2c9a390..47d0606 100644 --- a/docs_src/modifying_source_code.md +++ b/docs_src/modifying_source_code.md @@ -1,10 +1,10 @@ # Modifying source code -When modifying source code in the Automated Checkout reference implementation, Docker images need to be rebuilt and services need to be updated to run newly built images. This document contains the steps for accomplishing this. +When modifying source code in the Automated Vending reference implementation, Docker images need to be rebuilt and services need to be updated to run newly built images. This document contains the steps for accomplishing this. ## Assumptions -This document assumes the Automated Checkout services are already running. Additionally, it assumes you've already made a code change and saved the changes. +This document assumes the Automated Vending services are already running. Additionally, it assumes you've already made a code change and saved the changes. ## Building the service's new image @@ -22,11 +22,11 @@ Next, build the specific service's image: make ds-card-reader ``` -After Docker builds the image (by executing the steps in [`ds-card-reader/Dockerfile`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-card-reader/Dockerfile)), proceed to the next section. +After Docker builds the image (by executing the steps in [`ds-card-reader/Dockerfile`](https://github.com/intel-retail/automated-vending/tree/main/ds-card-reader/Dockerfile)), proceed to the next section. ## Remove and update the running service -One of the most effective methods of updating a Docker compose service is to remove the running container, and then re-run the `make` commands to bring up the entire Automated Checkout reference implementation stack. +One of the most effective methods of updating a Docker compose service is to remove the running container, and then re-run the `make` commands to bring up the entire Automated Vending reference implementation stack. First, identify the running container for the service (again, `ds-card-reader` in this example): diff --git a/docs_src/phases/phase1.md b/docs_src/phases/phase1.md index d8c96cf..a675db0 100644 --- a/docs_src/phases/phase1.md +++ b/docs_src/phases/phase1.md @@ -2,9 +2,9 @@ ## Overview -This document aims to help provide a simple introduction to how we interact with the various microservices in the Automated Checkout reference implementation, as well as demonstrating how EdgeX command API's are leveraged. +This document aims to help provide a simple introduction to how we interact with the various microservices in the Automated Vending reference implementation, as well as demonstrating how EdgeX command API's are leveraged. -The steps in this guide show how to simulate the automated checkout workflow using [`curl`](https://github.com/curl/curl) REST API calls. It is a step-by-step walkthrough with specific commands to run on the command line. +The steps in this guide show how to simulate the Automated Vending workflow using [`curl`](https://github.com/curl/curl) REST API calls. It is a step-by-step walkthrough with specific commands to run on the command line. The documentation in [phase 2](./phase2.md) and [phase 3](./phase3.md) will discuss more advanced methods of adding physical hardware and customized device services. @@ -49,7 +49,7 @@ If `maintenanceMode` is set to true, run the following command to reset state ma docker-compose -f docker-compose.ac.yml restart as-vending ds-controller-board as-controller-board-status ``` -1. In a separate terminal window, watch the logs for a few Automated Checkout services, so that incoming events can be seen: +1. In a separate terminal window, watch the logs for a few Automated Vending services, so that incoming events can be seen: ```bash docker-compose -f docker-compose.ac.yml logs -f ds-card-reader ds-controller-board ms-authentication as-vending as-controller-board-status @@ -74,7 +74,7 @@ Each section below contains specific steps and expected output for each of the s ### 1. Stock the cooler with inventory -In order to fill up the cooler with inventory, someone acting as a "stocker" must swipe their card and proceed to fill the Automated Checkout with products. +In order to fill up the cooler with inventory, someone acting as a "stocker" must swipe their card and proceed to fill the Automated Vending with products. However, before we get started, it's important to keep a few things in mind. We will perform a very specific sequence of events: @@ -99,7 +99,7 @@ For visualization purposes, the CV inference service serves the post-processed i It's OK to run the commands without critically analyzing them _in the moment_. You may find it most useful to review them in advance. - If you mess up, you should start fresh. Run the command `make down && make clean-docker && make run` to scrub the Automated Checkout data and containers, wait approximately one minute after all services have started, and begin again. This scenario does not have any dependencies on the other scenarios in phase 1. + If you mess up, you should start fresh. Run the command `make down && make clean-docker && make run` to scrub the Automated Vending data and containers, wait approximately one minute after all services have started, and begin again. This scenario does not have any dependencies on the other scenarios in phase 1. The following diagram represents the flow for swiping your badge and unlocking the door: @@ -110,14 +110,14 @@ The following diagram represents the flow for swiping your badge and unlocking t To simulate this, perform this REST API call to the `ds-card-reader` service ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003293374"}' http://localhost:48098/api/v2/device/name/card-reader/card-number +curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003293374"}' http://localhost:48098/api/v3/device/name/card-reader/card-number ``` !!! note There should not be any response message when running this EdgeX command successfully. !!! info - By default, the card number `0003293374` corresponds to a card in the [`ms-authentication/cards.json`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-authentication/cards.json) file that has the "stocker" role associated to it. + By default, the card number `0003293374` corresponds to a card in the [`ms-authentication/cards.json`](https://github.com/intel-retail/automated-vending/tree/main/ms-authentication/cards.json) file that has the "stocker" role associated to it. JSON object for `cardId` 0003293374. @@ -169,7 +169,7 @@ Then open the door, and close it afterwards, while waiting approximately 3-4 sec The following command makes a REST API call to the `ds-controller-board` service to open the door (no response body expected) ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed +curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed ``` Wait 3.75 seconds: @@ -186,7 +186,7 @@ sleep 3.75 The following command makes a REST API call to the `ds-controller-board` service to close the door (no response body expected) ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"1"}' http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed +curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"1"}' http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed ``` Wait about 20-30 seconds for the inventory to be discovered by the CV inference service, and also for background processing of events to occur. **The time-sensitive sequence has been completed.** @@ -207,7 +207,7 @@ curl -X GET http://localhost:48095/inventory (Click to Expand) Inventory API Response Example

-The (altered) contents of ms-inventory/inventory.json are contained in the content key below. +The (altered) contents of ms-inventory/inventory.json are contained in the content key below.

```json @@ -235,7 +235,7 @@ curl -X GET http://localhost:48095/auditlog (Click to Expand) Audit Log API Response Example

-The (altered) contents of ms-inventory/auditlog.json are contained in the content key below. +The (altered) contents of ms-inventory/auditlog.json are contained in the content key below.

```json @@ -261,11 +261,11 @@ Since this a stocking event and not a customer transaction, there is no ledger e

-By default, the ledger service has six registered accounts (accounts 1-6) for consumers. The valid accounts match the account ID's that have authorized access to the cooler through the ms-authentication service (see the ms-authentication/accounts.json file). +By default, the ledger service has six registered accounts (accounts 1-6) for consumers. The valid accounts match the account ID's that have authorized access to the cooler through the ms-authentication service (see the ms-authentication/accounts.json file).

-The (unaltered) contents of ms-ledger/ledger.json are contained in the content key below. +The (unaltered) contents of ms-ledger/ledger.json are contained in the content key below.

```json @@ -296,7 +296,7 @@ Now that the cooler's inventory has been stocked, we can simulate a customer swi !!! warning If you have not already populated the inventory as described in the [Stock the Cooler with Inventory](#Stock-the-Cooler-with-Inventory) section, do not proceed. The inferencing service follows a specific sequence for changes in inventory. The first transaction in the sequence is always a _gain_ of inventory, corresponding to the stocker adding items to inventory. The following transactions are _removal_ of inventory, corresponding to customers _taking_ items from inventory. - If you mess up, you should start fresh. Run the command `make down && make clean-docker && make run` to scrub the Automated Checkout data and containers, wait approximately one minute after all services have started, and begin again. This scenario relies on the stocking scenario in phase 1 - if the stocking scenario is skipped, it is still OK, but the randomized sequence of transactions will yield inventory/audit log/ledger changes that differ from the expected examples shown throughout this scenario. + If you mess up, you should start fresh. Run the command `make down && make clean-docker && make run` to scrub the Automated Vending data and containers, wait approximately one minute after all services have started, and begin again. This scenario relies on the stocking scenario in phase 1 - if the stocking scenario is skipped, it is still OK, but the randomized sequence of transactions will yield inventory/audit log/ledger changes that differ from the expected examples shown throughout this scenario. In a manner similar to the previous section (where we stocked our inventory), the following steps are taken when simulating a customer: @@ -316,7 +316,7 @@ That's it! Each of the above actions has a corresponding REST API call that we w To begin, start by performing the following REST command to simulate a customer swiping their badge to open the cooler ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003278380"}' http://localhost:48098/api/v2/device/name/card-reader/card-number +curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003278380"}' http://localhost:48098/api/v3/device/name/card-reader/card-number ``` !!! note @@ -355,7 +355,7 @@ Then open the door, and close it afterwards, while waiting approximately 3-4 sec The following command makes a REST API call to the `ds-controller-board` service to open the door (no response body expected) ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed +curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed ``` Wait 3.75 seconds: @@ -367,10 +367,10 @@ sleep 3.75 The following command makes a REST API call to the `ds-controller-board` service to close the door (no response body expected) ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"1"}' http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed +curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"1"}' http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed ``` -At this point we are done simulating customer interactions with the Automated Checkout. The next steps are to get the inventory, ledger, and audit logs, and verify that they all show consistent information ***(not time sensitive, but may need to wait 20-30 seconds for background processing)***: +At this point we are done simulating customer interactions with the Automated Vending. The next steps are to get the inventory, ledger, and audit logs, and verify that they all show consistent information ***(not time sensitive, but may need to wait 20-30 seconds for background processing)***: ```bash curl -X GET http://localhost:48095/inventory @@ -384,7 +384,7 @@ A few items have been removed from the inventory in the below API response. Care

-The (altered) contents of ms-inventory/inventory.json are contained in the content key below. +The (altered) contents of ms-inventory/inventory.json are contained in the content key below.

```json @@ -419,7 +419,7 @@ The audit log has a new transaction that corresponds to this customer interactio

-The (altered) contents of ms-inventory/auditlog.json are contained in the content key below. +The (altered) contents of ms-inventory/auditlog.json are contained in the content key below.

```json @@ -447,7 +447,7 @@ Note that this API response now includes a financial transaction indicating what

-The (altered) contents of ms-ledger/ledger.json are contained in the content key below. +The (altered) contents of ms-ledger/ledger.json are contained in the content key below.

```json @@ -486,7 +486,7 @@ From the ledger data, notice the transaction done by accountID 1. ### 3. The cooler requires maintenance -In this scenario, all Automated Checkout services are operating as usual, except the following conditions are present: +In this scenario, all Automated Vending services are operating as usual, except the following conditions are present: - The cooler has exceeded the maximum allowable temperature threshold of 83 degrees Fahrenheit - It has stayed at or above this temperature threshold for more than 15 seconds @@ -508,7 +508,7 @@ If the temperature temporarily exceeds the maximum or minimum allowable temperat -When the Automated Checkout is in an unstable state such as the one presented above, it enters _maintenance mode_. When the Automated Checkout is in this state, it automatically denies access to everyone except individuals that possess badges that are associated with the maintenance worker role. +When the Automated Vending is in an unstable state such as the one presented above, it enters _maintenance mode_. When the Automated Vending is in this state, it automatically denies access to everyone except individuals that possess badges that are associated with the maintenance worker role. !!! note Maintenance mode is triggered in a few conditions: @@ -533,12 +533,12 @@ This scenario walks through the following steps: It's OK to run the commands without critically analyzing them _in the moment_. You may find it most useful to review them in advance. - If you mess up, you should start fresh. Run the command `make down && make clean-docker && make run` to scrub the Automated Checkout data and containers, wait approximately one minute after all services have started, and begin again. This scenario does not have any dependencies on the other scenarios in phase 1. + If you mess up, you should start fresh. Run the command `make down && make clean-docker && make run` to scrub the Automated Vending data and containers, wait approximately one minute after all services have started, and begin again. This scenario does not have any dependencies on the other scenarios in phase 1. To begin the scenario, first start by setting the temperature of the cooler to `99.00` degrees Fahrenheit. The following command will make a REST API call to the `ds-controller-board` service ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"99.00"}' http://localhost:48097/api/v2/device/name/controller-board/setTemperature +curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"99.00"}' http://localhost:48097/api/v3/device/name/controller-board/setTemperature ``` !!! note @@ -583,7 +583,7 @@ For the sake of simplicity in this walkthrough, we will first fix the temperatur First, set the temperature to a normal value (45 degrees) a few times over the span of 15 seconds (minimum) ***(time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"45.00"}' http://localhost:48097/api/v2/device/name/controller-board/setTemperature +curl -X PUT -H "Content-Type: application/json" -d '{"setTemperature":"45.00"}' http://localhost:48097/api/v3/device/name/controller-board/setTemperature ``` !!! note @@ -594,7 +594,7 @@ Now that a new, proper average temperature value has been set, the maintenance w To do this, follow a familiar step, only this time use a card that has been assigned to a maintenance worker role ***(not time sensitive)***: ```bash -curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003278385"}' http://localhost:48098/api/v2/device/name/card-reader/card-number +curl -X PUT -H "Content-Type: application/json" -d '{"card-number":"0003278385"}' http://localhost:48098/api/v3/device/name/card-reader/card-number ``` !!! note @@ -627,8 +627,8 @@ The value of maintenanceMode will switch to true from -This is the end of the scenario, and should provide an essential understanding of maintenance mode as well as temperature reactions in the Automated Checkout reference implementation. +This is the end of the scenario, and should provide an essential understanding of maintenance mode as well as temperature reactions in the Automated Vending reference implementation. ## Summary -You have successfully run through a typical Automated Checkout workflow using simulated interactions and devices. In the other phases of this reference implementation, we ramp up to using physical devices and provide guidance on writing new services for your custom devices and needs. +You have successfully run through a typical Automated Vending workflow using simulated interactions and devices. In the other phases of this reference implementation, we ramp up to using physical devices and provide guidance on writing new services for your custom devices and needs. diff --git a/docs_src/phases/phase2.md b/docs_src/phases/phase2.md index bcf5842..c3be8e9 100644 --- a/docs_src/phases/phase2.md +++ b/docs_src/phases/phase2.md @@ -1,12 +1,12 @@ # Phase 2 - Add Card Reader Device -In [phase 1](./phase1.md), the scenarios presented a breakdown of the various modes, events, and services that are working together within the Automated Checkout reference implementation. Everything in phase 1 was simulated and all interactions were done via REST API calls. +In [phase 1](./phase1.md), the scenarios presented a breakdown of the various modes, events, and services that are working together within the Automated Vending reference implementation. Everything in phase 1 was simulated and all interactions were done via REST API calls. Phase 2 will be mostly the same, except there will now be a physical card reader device. This device is actually just a keyboard that types 10 digits and then presses enter, which is what a common RFID card reader also might do. ## Setup -If the Automated Checkout services are still running from phase 1, the services can stay running. The only service that will be terminated and re-created is `ds-card-reader` (which will be done as part of this guide). +If the Automated Vending services are still running from phase 1, the services can stay running. The only service that will be terminated and re-created is `ds-card-reader` (which will be done as part of this guide). Start by removing the `ds-card-reader` service. In order to do this, first identify the container's name using this command: @@ -21,7 +21,7 @@ docker rm -f container_name_or_id_from_previous_command ``` !!! note - If you encounter any issues with the `ds-card-reader` later in this guide, consider cleaning up all of the Automated Checkout services. The best way to guarantee a clean run through of this phase is to tear down any existing Automated Checkout environment and start from fresh. This can be accomplished by running the following steps. + If you encounter any issues with the `ds-card-reader` later in this guide, consider cleaning up all of the Automated Vending services. The best way to guarantee a clean run through of this phase is to tear down any existing Automated Vending environment and start from fresh. This can be accomplished by running the following steps. Navigate to the root of this repository - this can vary based on where you chose to clone the repository: @@ -35,7 +35,7 @@ docker rm -f container_name_or_id_from_previous_command make down && make clean-docker ``` - This will destroy any existing ledger entries, audit log entries, inventory changes, and EdgeX event readings and data associated with Automated Checkout. However, this will not alter any other non-Automated Checkout Docker images, containers, or volumes. The scope of the above command is limited to only Automated Checkout. + This will destroy any existing ledger entries, audit log entries, inventory changes, and EdgeX event readings and data associated with Automated Vending. However, this will not alter any other non-Automated Vending Docker images, containers, or volumes. The scope of the above command is limited to only Automated Vending. ## Plug in the card reader device @@ -62,7 +62,7 @@ Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub The particular _vendor ID_ and _product ID_ are spelled out clearly for each USB device. The card reader input device itself has been plugged in and has the vendor ID `ffff` and the product ID `0035`. !!! note - The VID and PID values are hexadecimal, base 16. A value of `ffff` is equal to `65535` in decimal, base 10, and `0035` in base 16 is equal to `53` in base 10. The configuration files in the Automated Checkout reference implementation device services may require some conversion between the two. If needed, consider searching online for a hexadecimal to decimal conversion calculator to make the process easier. + The VID and PID values are hexadecimal, base 16. A value of `ffff` is equal to `65535` in decimal, base 10, and `0035` in base 16 is equal to `53` in base 10. The configuration files in the Automated Vending reference implementation device services may require some conversion between the two. If needed, consider searching online for a hexadecimal to decimal conversion calculator to make the process easier. Once the VID and PID have been identified, the next step is to configure the `ds-card-reader` device service to grab that device and listen for input events. @@ -141,9 +141,9 @@ ds-card-reader: DRIVERCONFIG_PID: 53 # 0x0035 ``` -## Run the Automated Checkout reference implementation +## Run the Automated Vending reference implementation -Run the Automated Checkout reference implementation with the physical card reader component included: +Run the Automated Vending reference implementation with the physical card reader component included: ```bash make run-physical-card-reader @@ -162,7 +162,7 @@ For example, in [phase 1](./phase1.md#walkthrough-of-scenarios), the card number ## Dive deeper -Now that the card reader is working with a physical device, it may be time to make some changes to the underlying authentication data to allow your own cards to authenticate. The following sections illustrate the steps needed in order to extend the Automated Checkout reference implementation to work with your cards. +Now that the card reader is working with a physical device, it may be time to make some changes to the underlying authentication data to allow your own cards to authenticate. The following sections illustrate the steps needed in order to extend the Automated Vending reference implementation to work with your cards. ### Extending the card reader @@ -189,9 +189,9 @@ The `ms-authentication` microservice contains an index of all cards, accounts, a First, navigate to the `ms-authentication` directory in the root of the repository. These three `.json` files dictate the `ms-authentication` service's behavior: -- [`people.json`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-authentication/people.json) -- [`accounts.json`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-authentication/accounts.json) -- [`cards.json`](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-authentication/cards.json) +- [`people.json`](https://github.com/intel-retail/automated-vending/tree/main/ms-authentication/people.json) +- [`accounts.json`](https://github.com/intel-retail/automated-vending/tree/main/ms-authentication/accounts.json) +- [`cards.json`](https://github.com/intel-retail/automated-vending/tree/main/ms-authentication/cards.json) In this case, we're only going to add a new card and associate it with the person with ID 1. A typical card will look like this: @@ -241,7 +241,7 @@ make ds-card-reader ### Running the updated service -If the Automated Checkout services are already running, the best way to update the running `ms-authentication` service is to remove the `ms-authentication` container and then re-run the command to bring up the whole stack. +If the Automated Vending services are already running, the best way to update the running `ms-authentication` service is to remove the `ms-authentication` container and then re-run the command to bring up the whole stack. First, remove the `ms-authentication` container: @@ -274,7 +274,7 @@ make run-physical-card-reader make run-physical-card-reader ``` - If there are still issues, consider completely cleaning the Automated Checkout containers and volumes by running + If there are still issues, consider completely cleaning the Automated Vending containers and volumes by running ``` make down && make clean-docker @@ -293,4 +293,4 @@ The `ds-card-reader` service should be listening for input events. If your card ## Summary -The usage of a physical card reader device only requires a few changes from the simulated mode. In the `ds-card-reader` device service, the device's VID and PID are configured, the service's image gets rebuilt, and the service itself gets updated to use the new image. The device's interactions are captured by Go routines running in the device service itself, and EdgeX event readings are propagated throughout a handful of services to ensure a smooth Automated Checkout workflow. +The usage of a physical card reader device only requires a few changes from the simulated mode. In the `ds-card-reader` device service, the device's VID and PID are configured, the service's image gets rebuilt, and the service itself gets updated to use the new image. The device's interactions are captured by Go routines running in the device service itself, and EdgeX event readings are propagated throughout a handful of services to ensure a smooth Automated Vending workflow. diff --git a/docs_src/phases/phase3.md b/docs_src/phases/phase3.md index 4c1f817..55171e8 100644 --- a/docs_src/phases/phase3.md +++ b/docs_src/phases/phase3.md @@ -2,7 +2,7 @@ ## Overview -After [phase 2](../phases/phase2.md) has been completed, the next step is to integrate physical hardware. This guide will assist you in understanding the pieces of hardware that are needed in the Automated Checkout reference implementation. +After [phase 2](../phases/phase2.md) has been completed, the next step is to integrate physical hardware. This guide will assist you in understanding the pieces of hardware that are needed in the Automated Vending reference implementation. ## Getting Started @@ -15,15 +15,15 @@ Specifically, it handles the following integrations: | Module | Description | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | Door Sensor (open/close) | Instrumentation used to understand if the cooler door is open or closed and take appropriate action. | -| Maglock (lock/unlock) | Instrumentation is used to lock or unlock the automated checkout to allow for vending of a product. | -| LCD Display | Instrumentation is used for providing feedback to the person that is using the automated checkout. | +| Maglock (lock/unlock) | Instrumentation is used to lock or unlock the automated vending to allow for vending of a product. | +| LCD Display | Instrumentation is used for providing feedback to the person that is using the automated vending. | | LED Panel | Instrumentation is used to provide feedback to the developer as to the state of the board lock and door status. | -| Temperature/Humidity Sensor | Instrumentation is used to understand the physical environment inside the automated checkout and take appropriate action. | +| Temperature/Humidity Sensor | Instrumentation is used to understand the physical environment inside the automated vending and take appropriate action. | -We have created a reference implementation service that will interact with the controller board and EdgeX core services [here](../automated-checkout-services/device_services.md#card-reader). +We have created a reference implementation service that will interact with the controller board and EdgeX core services [here](../automated-vending-services/device_services.md#card-reader). ### Step 2: Integrate your own computer vision hardware and software -Next, in order to be able to provide computer vision capabilities in production environment to the Automated Checkout it is necessary to bring your own set of cameras and deep learning model. It is expected by the application services to receive an inventory delta using an MQTT broker. For demonstration and evaluation purposes, we have created a CV inference device service using [Intel openVINO](https://docs.openvinotoolkit.org/) inference engine and [openVINO product detection model](https://docs.openvinotoolkit.org/latest/_models_intel_product_detection_0001_description_product_detection_0001.html) that calculates inventory delta based on preloaded images to simulate stocking and purchasing products. +Next, in order to be able to provide computer vision capabilities in production environment to the Automated Vending it is necessary to bring your own set of cameras and deep learning model. It is expected by the application services to receive an inventory delta using an MQTT broker. For demonstration and evaluation purposes, we have created a CV inference device service using [Intel openVINO](https://docs.openvinotoolkit.org/) inference engine and [openVINO product detection model](https://docs.openvinotoolkit.org/latest/_models_intel_product_detection_0001_description_product_detection_0001.html) that calculates inventory delta based on preloaded images to simulate stocking and purchasing products. - Please see more details in the device services section [here](../automated-checkout-services/device_services.md#cv-inference). + Please see more details in the device services section [here](../automated-vending-services/device_services.md#cv-inference). diff --git a/docs_src/references.md b/docs_src/references.md index 372e638..c9c7572 100644 --- a/docs_src/references.md +++ b/docs_src/references.md @@ -4,24 +4,24 @@ | Service Name | Service Abbreviated Name | Link | |-------------------------|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Controller Board Status | `as-controller-board-status` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-controller-board-status](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-controller-board-status) | -| Vending | `as-vending` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending](https://github.com/intel-iot-devkit/automated-checkout/blob/master/as-vending) | +| Controller Board Status | `as-controller-board-status` | [https://github.com/intel-retail/automated-vending/tree/main/as-controller-board-status](https://github.com/intel-retail/automated-vending/tree/main/as-controller-board-status) | +| Vending | `as-vending` | [https://github.com/intel-retail/automated-vending/tree/main/as-vending](https://github.com/intel-retail/automated-vending/tree/main/as-vending) | ## Device services | Service Name | Service Abbreviated Name | Link | |------------------|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Card Reader | `ds-card-reader` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-card-reader](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-card-reader) | -| Controller Board | `ds-controller-board` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-controller-board](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-controller-board) | -| CV inference | `ds-cv-inference` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-cv-inference](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ds-cv-inference) | +| Card Reader | `ds-card-reader` | [https://github.com/intel-retail/automated-vending/tree/main/ds-card-reader](https://github.com/intel-retail/automated-vending/tree/main/ds-card-reader) | +| Controller Board | `ds-controller-board` | [https://github.com/intel-retail/automated-vending/tree/main/ds-controller-board](https://github.com/intel-retail/automated-vending/tree/main/ds-controller-board) | +| CV inference | `ds-cv-inference` | [https://github.com/intel-retail/automated-vending/tree/main/ds-cv-inference](https://github.com/intel-retail/automated-vending/tree/main/ds-cv-inference) | ## Microservices (business logic services) | Service Name | Service Abbreviated Name | Link | |----------------|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Authentication | `ms-authentication` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-authentication](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-authentication) | -| Inventory | `ms-inventory` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-inventory](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-inventory) | -| Ledger | `ms-ledger` | [https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-ledger](https://github.com/intel-iot-devkit/automated-checkout/blob/master/ms-ledger) | +| Authentication | `ms-authentication` | [https://github.com/intel-retail/automated-vending/tree/main/ms-authentication](https://github.com/intel-retail/automated-vending/tree/main/ms-authentication) | +| Inventory | `ms-inventory` | [https://github.com/intel-retail/automated-vending/tree/main/ms-inventory](https://github.com/intel-retail/automated-vending/tree/main/ms-inventory) | +| Ledger | `ms-ledger` | [https://github.com/intel-retail/automated-vending/tree/main/ms-ledger](https://github.com/intel-retail/automated-vending/tree/main/ms-ledger) | ## Other diff --git a/docs_src/troubleshooting.md b/docs_src/troubleshooting.md index 5d67efd..9a1e66c 100644 --- a/docs_src/troubleshooting.md +++ b/docs_src/troubleshooting.md @@ -4,12 +4,12 @@ The following guide will help walk you through the flow of data to address poten ## Ensuring your device services receive data -All sensor data that is ingested in Automated Checkout flows through a device service as the first step. These device services are the first place we should check to ensure they are both running and ingesting data. One of the best ways to do to this is to leverage Portainer (included in EdgeX Releases). +All sensor data that is ingested in Automated Vending flows through a device service as the first step. These device services are the first place we should check to ensure they are both running and ingesting data. One of the best ways to do to this is to leverage Portainer (included in EdgeX Releases). !!!info *Portainer is a tool to help manage Docker containers. To learn more visit: [https://www.portainer.io/overview/](https://www.portainer.io/overview/)* -We have 3 device services of note in Automated Checkout: +We have 3 device services of note in Automated Vending: - Controller board – Handles the interface between Arduino firmware and EdgeX. - Card reader – Handles the interface between an RFID card reader and EdgeX. @@ -50,13 +50,13 @@ After ensuring that data is flowing properly to the device services, the next pl *Redis Desktop Manager is another tool to manage Redis databases: [https://redisdesktop.com/](https://redisdesktop.com/)* -Redis Commander can be run in Docker by simply executing the following shell command (you may need to change the name of the `automated-checkout_default` network): +Redis Commander can be run in Docker by simply executing the following shell command (you may need to change the name of the `automated-vending_default` network): ```bash docker run --rm --name redis-commander -d \ -p 8081:8081 \ --env REDIS_HOSTS=edgex-redis \ - --network automated-checkout_default \ + --network automated-vending_default \ rediscommander/redis-commander:latest ``` @@ -75,7 +75,7 @@ After ensuring data has made it to the database, the next place to check is the ![Portainer as-controller-board-status](./images/as-controller-board-status.png) -In the unlikely event that no data is flowing at all to the Controller Board status App Service, this would lead us to an issue with the ZMQ connection from the App Service to Core Data. Double checking the TOML file configuration where the hostname, port, and topic are specified would be a good place to start. You should also check that the App Service is on the same docker network and is accessible via the network. +Double checking the YAML file configuration where the hostname, port, and topic are specified would be a good place to start. You should also check that the App Service is on the same docker network and is accessible via the network. Once connectivity issues have been resolved, the next step is to ensure that all filters (i.e. device names) are correct and match what is shown in the database from the previous step. If they do not match, then they will be filtered out and not be processed. One easy way to confirm that data is flowing is to remove filters entirely from the pipeline to see that there is data flowing. diff --git a/ds-card-reader/.golangci.yml b/ds-card-reader/.golangci.yml index c147474..eedbb4d 100644 --- a/ds-card-reader/.golangci.yml +++ b/ds-card-reader/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: diff --git a/ds-card-reader/Dockerfile b/ds-card-reader/Dockerfile index 71fcc11..660dfa6 100644 --- a/ds-card-reader/Dockerfile +++ b/ds-card-reader/Dockerfile @@ -1,14 +1,15 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -FROM golang:1.18-alpine3.16 AS builder +FROM golang:1.20-alpine3.17 AS builder LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' # add git for go modules -RUN apk update && apk add --no-cache make git gcc libc-dev zeromq-dev linux-headers +# hadolint ignore=DL3018 +RUN apk update && apk add --no-cache make git gcc libc-dev linux-headers ENV GO111MODULE=on WORKDIR /usr/local/bin/ @@ -28,16 +29,17 @@ COPY . . RUN make gobuild # Next image - Copy built Go binary into new workspace -FROM alpine +FROM alpine:3.17 LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' -RUN apk add --update --no-cache zeromq dumb-init +# hadolint ignore=DL3018 +RUN apk add --update --no-cache dumb-init COPY --from=builder /usr/local/bin/ds-card-reader/res/profiles/ds-card-reader.yaml /res/profiles/ds-card-reader.yaml -COPY --from=builder /usr/local/bin/ds-card-reader/res/devices/device-list.toml /res/devices/device-list.toml -COPY --from=builder /usr/local/bin/ds-card-reader/res/configuration.toml /res/configuration.toml +COPY --from=builder /usr/local/bin/ds-card-reader/res/devices/device-list.yaml /res/devices/device-list.yaml +COPY --from=builder /usr/local/bin/ds-card-reader/res/configuration.yaml /res/configuration.yaml COPY --from=builder /usr/local/bin/ds-card-reader/main /ds-card-reader CMD [ "/ds-card-reader", "-cp=consul.http://edgex-core-consul:8500", "-r"] diff --git a/ds-card-reader/LICENSE b/ds-card-reader/LICENSE index 7bad583..4f84e34 100644 --- a/ds-card-reader/LICENSE +++ b/ds-card-reader/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/ds-card-reader/Makefile b/ds-card-reader/Makefile index c5e1c70..e84baed 100644 --- a/ds-card-reader/Makefile +++ b/ds-card-reader/Makefile @@ -1,9 +1,9 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build gobuild run gorun stop test lint -MICROSERVICE=automated-checkout/ds-card-reader +MICROSERVICE=automated-vending/ds-card-reader ARCH=$(shell uname -m) @@ -19,7 +19,7 @@ docker: . gobuild: tidy - CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a -installsuffix cgo main.go + CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a main.go run: docker run \ @@ -34,7 +34,7 @@ stop: docker rm -f $(MICROSERVICE):dev test: - go test -tags no_zmq -test.v \ + go test -test.v \ -cover \ ./... @@ -46,7 +46,7 @@ testHTML: go tool cover -html=test_coverage.out testPhysical: - sudo -E go test -tags no_zmq -test.v \ + sudo -E go test -test.v \ -cover \ -tags=physical \ ./... diff --git a/ds-card-reader/common/common.go b/ds-card-reader/common/common.go index 5b3cb7f..f7362ee 100644 --- a/ds-card-reader/common/common.go +++ b/ds-card-reader/common/common.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package common diff --git a/ds-card-reader/device/config.go b/ds-card-reader/device/config.go index fbd6d93..e11d76b 100644 --- a/ds-card-reader/device/config.go +++ b/ds-card-reader/device/config.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -8,7 +8,7 @@ type ServiceConfig struct { DriverConfig Config } -// DriverConfig holds the configurable options for a automated checkout +// DriverConfig holds the configurable options for an automated vending solution // card reader device type Config struct { DeviceName string diff --git a/ds-card-reader/device/config_test.go b/ds-card-reader/device/config_test.go index 06a9247..494893a 100644 --- a/ds-card-reader/device/config_test.go +++ b/ds-card-reader/device/config_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device diff --git a/ds-card-reader/device/device.go b/ds-card-reader/device/device.go index b11f2b9..7a0a66d 100644 --- a/ds-card-reader/device/device.go +++ b/ds-card-reader/device/device.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -6,8 +6,8 @@ package device import ( "fmt" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) // CardReader is an abstraction that allows for operations to be performed on diff --git a/ds-card-reader/device/device_test.go b/ds-card-reader/device/device_test.go index 89b0b22..d4e24fe 100644 --- a/ds-card-reader/device/device_test.go +++ b/ds-card-reader/device/device_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -7,8 +7,8 @@ import ( "reflect" "testing" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" require "github.com/stretchr/testify/require" ) diff --git a/ds-card-reader/device/physical.go b/ds-card-reader/device/physical.go index 5b23674..d4719b5 100644 --- a/ds-card-reader/device/physical.go +++ b/ds-card-reader/device/physical.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -8,9 +8,9 @@ import ( "fmt" "time" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - logger "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v2/common" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + logger "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v3/common" evdev "github.com/gvalkov/golang-evdev" ) diff --git a/ds-card-reader/device/physical_test.go b/ds-card-reader/device/physical_test.go index 9a453ef..f99e749 100644 --- a/ds-card-reader/device/physical_test.go +++ b/ds-card-reader/device/physical_test.go @@ -1,7 +1,7 @@ //go:build all || physical // +build all physical -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -9,13 +9,11 @@ package device import ( "bufio" "fmt" - "io/ioutil" "os" "strings" "testing" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" evdev "github.com/gvalkov/golang-evdev" assert "github.com/stretchr/testify/assert" require "github.com/stretchr/testify/require" @@ -33,7 +31,7 @@ const ( ) func clearLogs() error { - return ioutil.WriteFile(physicalLogFile, []byte{}, 0644) + return os.WriteFile(physicalLogFile, []byte{}, 0644) } func doesLogFileContainString(input string) (bool, error) { diff --git a/ds-card-reader/device/virtual.go b/ds-card-reader/device/virtual.go index 6390131..15df7f9 100644 --- a/ds-card-reader/device/virtual.go +++ b/ds-card-reader/device/virtual.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -7,9 +7,9 @@ import ( "fmt" "time" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - logger "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - "github.com/edgexfoundry/go-mod-core-contracts/v2/common" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + logger "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/common" ) // CardReaderVirtual allows for the emulation of a physical card reader device diff --git a/ds-card-reader/device/virtual_test.go b/ds-card-reader/device/virtual_test.go index b5b9230..094fbd8 100644 --- a/ds-card-reader/device/virtual_test.go +++ b/ds-card-reader/device/virtual_test.go @@ -1,7 +1,7 @@ //go:build all || !physical // +build all !physical -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -12,18 +12,18 @@ import ( "ds-card-reader/common" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - logger "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + logger "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" assert "github.com/stretchr/testify/assert" require "github.com/stretchr/testify/require" ) const ( - virtualDeviceSearchPath = "" - virtualDeviceName = "ds-card-reader" - virtualVID = uint16(0x0000) - virtualPID = uint16(0x0000) - expectedCardNumberVirtual = "0123456789" + virtualDeviceSearchPath = "" + virtualDeviceName = "ds-card-reader" + virtualVID = uint16(0x0000) + virtualPID = uint16(0x0000) + expectedCardNumberVirtual = "0123456789" ) // TestVirtualCardReader validates that the InitializeCardReader diff --git a/ds-card-reader/driver/driver.go b/ds-card-reader/driver/driver.go index aa1052a..587d936 100644 --- a/ds-card-reader/driver/driver.go +++ b/ds-card-reader/driver/driver.go @@ -1,47 +1,48 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package driver import ( - "errors" "fmt" common "ds-card-reader/common" device "ds-card-reader/device" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/device-sdk-go/v2/pkg/service" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - "github.com/edgexfoundry/go-mod-core-contracts/v2/models" + "github.com/edgexfoundry/device-sdk-go/v3/pkg/interfaces" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/models" ) // CardReaderDriver represents the EdgeX driver that interfaces with the // underlying device type CardReaderDriver struct { LoggingClient logger.LoggingClient + asyncCh chan<- *dsModels.AsyncValues CardReader device.CardReader Config *device.ServiceConfig - svc *service.DeviceService + sdk interfaces.DeviceServiceSDK +} + +func NewCardReaderDriver() interfaces.ProtocolDriver { + return &CardReaderDriver{} } // Initialize initializes the card reader device within EdgeX. This is the // main entrypoint of this application -func (drv *CardReaderDriver) Initialize(lc logger.LoggingClient, asyncCh chan<- *dsModels.AsyncValues, deviceCh chan<- []dsModels.DiscoveredDevice) (err error) { +func (drv *CardReaderDriver) Initialize(sdk interfaces.DeviceServiceSDK) (err error) { // propagate the logging client to the driver so it can use it too - drv.LoggingClient = lc + drv.sdk = sdk + drv.LoggingClient = sdk.LoggingClient() + drv.asyncCh = sdk.AsyncValuesChannel() // Only setting if nil allows for unit testing with VirtualBoard enabled if drv.Config == nil { - drv.svc = service.RunningService() - if drv.svc == nil { - return errors.New("custom card reader driver service is nil") - } - drv.Config = &device.ServiceConfig{} - err := drv.svc.LoadCustomConfig(drv.Config, "DriverConfig") + err := sdk.LoadCustomConfig(drv.Config, "DriverConfig") if err != nil { return fmt.Errorf("custom card reader configuration failed to load: %v", err) } @@ -52,8 +53,8 @@ func (drv *CardReaderDriver) Initialize(lc logger.LoggingClient, asyncCh chan<- // initialize the card reader device so that it can be controlled by our // EdgeX driver, and so that it can store configuration values drv.CardReader, err = device.InitializeCardReader( - lc, - asyncCh, + drv.LoggingClient, + drv.asyncCh, drv.Config.DriverConfig.DeviceSearchPath, drv.Config.DriverConfig.DeviceName, drv.Config.DriverConfig.VID, @@ -144,12 +145,24 @@ func (drv *CardReaderDriver) RemoveDevice(deviceName string, protocols map[strin return nil } +// DisconnectDevice allows EdgeX to emulate disconnection +func (drv *CardReaderDriver) DisconnectDevice(deviceName string, protocols map[string]models.ProtocolProperties) error { + return nil +} + // Stop allows EdgeX to emulate stopping the device func (drv *CardReaderDriver) Stop(force bool) error { return nil } -// DisconnectDevice allows EdgeX to emulate disconnection -func (drv *CardReaderDriver) DisconnectDevice(deviceName string, protocols map[string]models.ProtocolProperties) error { +func (drv *CardReaderDriver) Start() error { + return nil +} + +func (drv *CardReaderDriver) Discover() error { + return fmt.Errorf("driver's Discover function isn't implemented") +} + +func (drv *CardReaderDriver) ValidateDevice(device models.Device) error { return nil } diff --git a/ds-card-reader/driver/driver_test.go b/ds-card-reader/driver/driver_test.go index 5249134..8022d1f 100644 --- a/ds-card-reader/driver/driver_test.go +++ b/ds-card-reader/driver/driver_test.go @@ -1,7 +1,7 @@ //go:build all || physical || !physical // +build all physical !physical -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause // notes on why physical and !physical build tags are present: @@ -20,11 +20,13 @@ import ( "fmt" "testing" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v2/common" - "github.com/edgexfoundry/go-mod-core-contracts/v2/models" + sdkMocks "github.com/edgexfoundry/device-sdk-go/v3/pkg/interfaces/mocks" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v3/common" + "github.com/edgexfoundry/go-mod-core-contracts/v3/models" assert "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" require "github.com/stretchr/testify/require" ) @@ -370,7 +372,11 @@ func TestCardReaderDriver_Initialize(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if err := tt.drv.Initialize(tt.args.lc, tt.args.asyncCh, tt.args.deviceCh); (err != nil) != tt.wantErr { + mockSDK := &sdkMocks.DeviceServiceSDK{} + mockSDK.On("LoggingClient").Return(tt.args.lc) + mockSDK.On("AsyncValuesChannel").Return(nil) + mockSDK.On("LoadCustomConfig", mock.Anything, mock.Anything).Return(nil) + if err := tt.drv.Initialize(mockSDK); (err != nil) != tt.wantErr { t.Errorf("CardReaderDriver.Initialize() error = %v, wantErr %v", err, tt.wantErr) } }) diff --git a/ds-card-reader/go.mod b/ds-card-reader/go.mod index 4394f57..99cb06c 100644 --- a/ds-card-reader/go.mod +++ b/ds-card-reader/go.mod @@ -1,72 +1,77 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module ds-card-reader -go 1.18 +go 1.20 require ( - github.com/edgexfoundry/device-sdk-go/v2 v2.2.0 - github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 + github.com/edgexfoundry/device-sdk-go/v3 v3.0.0 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 github.com/gvalkov/golang-evdev v0.0.0-20180516222720-b6f418b1fe5a - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.4 ) require ( - bitbucket.org/bertimus9/systemstat v0.5.0 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect github.com/OneOfOne/xxhash v1.2.8 // indirect - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect + github.com/armon/go-metrics v0.3.10 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.2 // indirect + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 // indirect + github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 // indirect github.com/fatih/color v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.4.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.13.0 // indirect github.com/go-redis/redis/v7 v7.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/consul/api v1.9.1 // indirect + github.com/hashicorp/consul/api v1.20.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v0.12.0 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/hashicorp/go-hclog v0.14.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/golang-lru v0.5.0 // indirect - github.com/hashicorp/serf v0.9.5 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/leodido/go-urn v1.2.3 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect - github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect - github.com/mitchellh/reflectwalk v1.0.0 // indirect - github.com/pebbe/zmq4 v1.2.7 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/nats-io/nats.go v1.25.0 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect - github.com/spiffe/go-spiffe/v2 v2.0.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/spiffe/go-spiffe/v2 v2.1.4 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/errs v1.2.2 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + github.com/zeebo/errs v1.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/ds-card-reader/go.sum b/ds-card-reader/go.sum index 4135bac..a1497a7 100644 --- a/ds-card-reader/go.sum +++ b/ds-card-reader/go.sum @@ -1,90 +1,87 @@ -bitbucket.org/bertimus9/systemstat v0.5.0 h1:n0aLnh2Jo4nBUBym9cE5PJDG8GT6g+4VuS2Ya2jYYpA= -bitbucket.org/bertimus9/systemstat v0.5.0/go.mod h1:EkUWPp8lKFPMXP8vnbpT5JDI0W/sTiLZAvN8ONWErHY= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= -github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edgexfoundry/device-sdk-go/v2 v2.2.0 h1:wapuEQwSSmJQfdHvVT0maxyyE6Y1QQXOMI4YgsFkOek= -github.com/edgexfoundry/device-sdk-go/v2 v2.2.0/go.mod h1:QRG3JZxLiuUirj4cvkYPVFu7WIZMJyn/TuT2nXtAqYc= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 h1:4UVNGRaKbkH5aEhQrto26Q65ydmhZYReRw/6ZNQ5J5E= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0/go.mod h1:JKRxVTC5g1IRoQuT6T7pW6O6XnfjQTZgFjEazPHAHng= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 h1:Sfi9jAIgRXZaJQw8Ji6+8//47D+iOyGiXQSNZXhy3HE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0/go.mod h1:jyfVSx7mI3u/o/oo10COxBRBvJ8O/9I3z2xAwPmNt/Q= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 h1:FdnA7hLq0U8PeMAIuJXt4KcXLAyGo7OjckzxTAwaoBc= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0/go.mod h1:+X6C0h8ZTJe+lLU2AGJfiAzCJK3zL+yM6cej9VC+79E= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 h1:Rqr1CgBXppAeehCkPAHQ6hjyLlm2KTR4IKiKpExm7gg= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0/go.mod h1:dQiOiga0KMGHXqFs4nI+Rp19hQR3gZ+3lDRgI9x5Q7M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/edgexfoundry/device-sdk-go/v3 v3.0.0 h1:CpHBsVkjxkZo3wtk/+xmic2XC6HU3MLG5/S51lcnd9E= +github.com/edgexfoundry/device-sdk-go/v3 v3.0.0/go.mod h1:z2C2nbnG7ZDwEyv3eA36olmlRkLUsYXEGgK6YcnpruI= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 h1:gXVxaZPcRJl2MhCIK/GOXZnQL+21xOUpGDTLTcVCxSk= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1/go.mod h1:Or09TpF5HF3FjlqX3kJEFhBCsTvbHY0Nu28UF0MvB3w= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 h1:rdk8KMcU8fA6o9MCb0O68bboxZTdLiXTZByNttEtRwE= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0/go.mod h1:8RlYm5CPzZgUsfXDWVP1TIeUMhsDNIdRdj1HXdomtOI= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 h1:xjwCI34DLM31cSl1q9XmYgXS3JqXufQJMgohnLLLDx0= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0/go.mod h1:zzzWGWij6wAqm1go9TLs++TFMIsBqBb1eRnIj4mRxGw= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 h1:nU37Uo4/kloTMrdqDN9SJuDoXb3FpHaMdwVbHtn9PPk= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0/go.mod h1:x2CueD9gn/CmtCvDNFgrgBnR+B1iWJMSrC5+gesfDJ0= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 h1:6LXGElSScCCQzNpR3WjcgVz0RUc9GbfxETvif/4++iI= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0/go.mod h1:SGyo4fAHzOhDAd2Usa9RaBT/sOzkbceIqLrDG0+iYy8= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 h1:XyoDjeeVBMNwlJb6ljcTOl1QOp5gabcJc7pYSPYKNPA= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1/go.mod h1:Ts9l+TknRKaqFsXmrTuKyV1Y5qIr+eiexVYkQuXnfxk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.13.0 h1:cFRQdfaSMCOSfGCCLB20MHvuoHb/s5G8L5pu2ppK5AQ= +github.com/go-playground/validator/v10 v10.13.0/go.mod h1:dwu7+CG8/CtBiJFZDz4e+5Upb6OLw04gtBYw0mcG/z4= github.com/go-redis/redis/v7 v7.3.0 h1:3oHqd0W7f/VLKBxeYTEpqdMUsmMectngjM9OtoRoIgg= github.com/go-redis/redis/v7 v7.3.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -93,241 +90,242 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gvalkov/golang-evdev v0.0.0-20180516222720-b6f418b1fe5a h1:PpqPstphGuFEdiuje4K8NmWN+Qzvu15NN/oFa1w/lGM= github.com/gvalkov/golang-evdev v0.0.0-20180516222720-b6f418b1fe5a/go.mod h1:SAzVFKCRezozJTGavF3GX8MBUruETCqzivVLYiywouA= -github.com/hashicorp/consul/api v1.9.1 h1:SngrdG2L62qqLsUz85qcPhFZ78rPf8tcD5qjMgs6MME= -github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= +github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 h1:DcITQwl3ymmg7i1XfwpZFs/TPv2PuTwxE8bnuKVtKlk= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54/go.mod h1:dIfpPVUR+ZfkzkDcKnn+oPW1jKeXe4WlNWc7rIXOVxM= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= +github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE= +github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pebbe/zmq4 v1.2.7 h1:6EaX83hdFSRUEhgzSW1E/SPoTS3JeYZgYkBvwdcrA9A= -github.com/pebbe/zmq4 v1.2.7/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/spiffe/go-spiffe/v2 v2.0.0 h1:y6N7BZAxgaFZYELyrIdxSMm2e2tWpzgQewUts9h1hfM= -github.com/spiffe/go-spiffe/v2 v2.0.0/go.mod h1:TEfgrEcyFhuSuvqohJt6IxENUNeHfndWCCV1EX7UaVk= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spiffe/go-spiffe/v2 v2.1.4 h1:Z31Ycaf2Z5DF38sQGmp+iGKjBhBlSzfAq68bfy67Mxw= +github.com/spiffe/go-spiffe/v2 v2.1.4/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= -github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/ds-card-reader/main.go b/ds-card-reader/main.go old mode 100644 new mode 100755 index f6c26d5..ae3ae12 --- a/ds-card-reader/main.go +++ b/ds-card-reader/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -6,7 +6,7 @@ package main import ( "ds-card-reader/driver" - "github.com/edgexfoundry/device-sdk-go/v2/pkg/startup" + "github.com/edgexfoundry/device-sdk-go/v3/pkg/startup" ) const ( @@ -15,5 +15,6 @@ const ( ) func main() { - startup.Bootstrap(serviceName, version, new(driver.CardReaderDriver)) + drv := driver.NewCardReaderDriver() + startup.Bootstrap(serviceName, version, drv) } diff --git a/ds-card-reader/res/configuration.toml b/ds-card-reader/res/configuration.toml deleted file mode 100644 index 1683695..0000000 --- a/ds-card-reader/res/configuration.toml +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -MaxEventSize = 0 # value 0 unlimit the maximum event size that can be sent to message bus or core-data - -[Writable] -LogLevel = "INFO" - # InsecureSecrets are required for when Redis is used for message bus - [Writable.InsecureSecrets] - [Writable.InsecureSecrets.DB] - path = "redisdb" - [Writable.InsecureSecrets.DB.Secrets] - username = "" - password = "" - [Writable.Reading] - ReadingUnits = true - -[Service] -HealthCheckInterval = "10s" -Host = "localhost" -ServerBindAddr = "" # blank value defaults to Service.Host value -Port = 48098 -StartupMsg = "Card Reader device service started" -# MaxRequestSize limit the request body size in byte of put command -MaxRequestSize = 0 # value 0 unlimit the request size. -RequestTimeout = "5s" - [Service.CORSConfiguration] - EnableCORS = false - CORSAllowCredentials = false - CORSAllowedOrigin = "https://localhost" - CORSAllowedMethods = "GET, POST, PUT, PATCH, DELETE" - CORSAllowedHeaders = "Authorization, Accept, Accept-Language, Content-Language, Content-Type, X-Correlation-ID" - CORSExposeHeaders = "Cache-Control, Content-Language, Content-Length, Content-Type, Expires, Last-Modified, Pragma, X-Correlation-ID" - CORSMaxAge = 3600 - -[Registry] -Host = "localhost" -Port = 8500 -Type = "consul" - -[Clients] - [Clients.core-data] - Protocol = "http" - Host = "localhost" - Port = 59880 - - [Clients.core-metadata] - Protocol = "http" - Host = "localhost" - Port = 59881 - -[DriverConfig] - DeviceName = "card-reader" - DeviceSearchPath = "" - VID = 0 - PID = 0 - SimulateDevice = true - -[Device] -DataTransform = true -MaxCmdOps = 128 -MaxCmdValueLen = 256 -ProfilesDir = "./res/profiles" -DevicesDir = "./res/devices" -UpdateLastConnected = false -EnableAsyncReadings = true -AsyncBufferSize = 16 -Labels = [] -UseMessageBus = true - [Device.Discovery] - Enabled = false - Interval = "30s" - -[MessageQueue] -Protocol = "tcp" -Host = "localhost" -Port = 1883 -Type = "mqtt" -AuthMode = "none" -PublishTopicPrefix = "edgex/events/device" # /// will be added to this Publish Topic prefix - [MessageQueue.Optional] - ClientId = "ds-card-reader" - Qos = "0" # Quality of Sevice values are 0 (At most once), 1 (At least once) or 2 (Exactly once) - KeepAlive = "10" # Seconds (must be 2 or greater) - Retained = "false" - AutoReconnect = "true" - ConnectTimeout = "5" # Seconds - SkipCertVerify = "false" \ No newline at end of file diff --git a/ds-card-reader/res/configuration.yaml b/ds-card-reader/res/configuration.yaml new file mode 100755 index 0000000..989deb3 --- /dev/null +++ b/ds-card-reader/res/configuration.yaml @@ -0,0 +1,21 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +Writable: + LogLevel: INFO +Service: + Host: localhost + Port: 48098 + StartupMsg: Card Reader device service started +DriverConfig: + DeviceName: card-reader + DeviceSearchPath: '' + VID: 0 + PID: 0 + SimulateDevice: true +Device: + ProfilesDir: ./res/profiles + DevicesDir: ./res/devices +MessageBus: + Optional: + ClientId: ds-card-reader diff --git a/ds-card-reader/res/devices/device-list.toml b/ds-card-reader/res/devices/device-list.toml deleted file mode 100644 index c59d7ca..0000000 --- a/ds-card-reader/res/devices/device-list.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -[[DeviceList]] - Name = 'card-reader' - ProfileName = 'rfid-card-reader' - [DeviceList.Protocols] - [DeviceList.Protocols.other] - #TODO: move protocol properties from configuration.toml to here - [[DeviceList.AutoEvents]] - Interval = '3s' - OnChange = true - SourceName = 'status' \ No newline at end of file diff --git a/ds-card-reader/res/devices/device-list.yaml b/ds-card-reader/res/devices/device-list.yaml new file mode 100755 index 0000000..61c7539 --- /dev/null +++ b/ds-card-reader/res/devices/device-list.yaml @@ -0,0 +1,14 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +deviceList: + - name: card-reader + profileName: rfid-card-reader + protocols: + other: + Address: simple01 + Port: 300 + autoEvents: + - interval: 3s + onChange: true + sourceName: status diff --git a/ds-card-reader/res/profiles/ds-card-reader.yaml b/ds-card-reader/res/profiles/ds-card-reader.yaml index bcbbb98..487bfd9 100644 --- a/ds-card-reader/res/profiles/ds-card-reader.yaml +++ b/ds-card-reader/res/profiles/ds-card-reader.yaml @@ -1,6 +1,4 @@ ---- - -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause name: "rfid-card-reader" diff --git a/ds-controller-board/.golangci.yml b/ds-controller-board/.golangci.yml index 540137f..6e4135b 100644 --- a/ds-controller-board/.golangci.yml +++ b/ds-controller-board/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: # timeout for analysis, e.g. 30s, 5m, default is 1m diff --git a/ds-controller-board/Dockerfile b/ds-controller-board/Dockerfile index 394a14a..b97abc9 100644 --- a/ds-controller-board/Dockerfile +++ b/ds-controller-board/Dockerfile @@ -1,14 +1,15 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -FROM golang:1.18-alpine3.16 AS builder +FROM golang:1.20-alpine3.17 AS builder LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' # add git for go modules -RUN apk update && apk add --no-cache make git gcc libc-dev zeromq-dev linux-headers +# hadolint ignore=DL3018 +RUN apk update && apk add --no-cache make git ENV GO111MODULE=on WORKDIR /usr/local/bin/ @@ -27,16 +28,17 @@ COPY . . RUN make gobuild # Next image - Copy built Go binary into new workspace -FROM alpine +FROM alpine:3.17 LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' -RUN apk add --update --no-cache zeromq dumb-init +# hadolint ignore=DL3018 +RUN apk add --update --no-cache dumb-init COPY --from=builder /app/res/profiles/ds-controller-board.yaml /res/profiles/ds-controller-board.yaml -COPY --from=builder /app/res/devices/device-list.toml /res/devices/device-list.toml -COPY --from=builder /app/res/configuration.toml /res/configuration.toml +COPY --from=builder /app/res/devices/device-list.yaml /res/devices/device-list.yaml +COPY --from=builder /app/res/configuration.yaml /res/configuration.yaml COPY --from=builder /app/ds-controller-board /ds-controller-board CMD [ "/ds-controller-board", "-cp=consul.http://edgex-core-consul:8500", "-r" ] diff --git a/ds-controller-board/LICENSE b/ds-controller-board/LICENSE index 7c1aef1..df5d5be 100644 --- a/ds-controller-board/LICENSE +++ b/ds-controller-board/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/ds-controller-board/Makefile b/ds-controller-board/Makefile index 6e4e802..c6b3614 100644 --- a/ds-controller-board/Makefile +++ b/ds-controller-board/Makefile @@ -1,10 +1,10 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build gobuild run gorun stop test lint -MICROSERVICE=automated-checkout/ds-controller-board +MICROSERVICE=automated-vending/ds-controller-board ARCH=$(shell uname -m) @@ -20,7 +20,7 @@ docker: . gobuild: tidy - CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a -installsuffix cgo -o ds-controller-board + CGO_ENABLED=0 GOOS=linux go build -ldflags='-s -w' -a -o ds-controller-board run: docker run \ @@ -35,7 +35,7 @@ stop: docker rm -f $(MICROSERVICE):dev test: - go test -tags no_zmq -test.v \ + go test -test.v \ -cover \ ./... @@ -47,7 +47,7 @@ testHTML: go tool cover -html=test_coverage.out testPhysical: - sudo -E go test -tags no_zmq -test.v \ + sudo -E go test -test.v \ -cover \ -tags=physical \ ./... diff --git a/ds-controller-board/device/common.go b/ds-controller-board/device/common.go index 7419d31..6c7ba7c 100644 --- a/ds-controller-board/device/common.go +++ b/ds-controller-board/device/common.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device diff --git a/ds-controller-board/device/common_test.go b/ds-controller-board/device/common_test.go index 4c7e763..552bad4 100644 --- a/ds-controller-board/device/common_test.go +++ b/ds-controller-board/device/common_test.go @@ -1,7 +1,7 @@ //go:build all // +build all -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device diff --git a/ds-controller-board/device/config.go b/ds-controller-board/device/config.go index 78e6671..b58ea64 100644 --- a/ds-controller-board/device/config.go +++ b/ds-controller-board/device/config.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device diff --git a/ds-controller-board/device/config_test.go b/ds-controller-board/device/config_test.go index 7ccfb12..7f906fd 100644 --- a/ds-controller-board/device/config_test.go +++ b/ds-controller-board/device/config_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device diff --git a/ds-controller-board/device/device.go b/ds-controller-board/device/device.go index 7393c90..a8f13c5 100644 --- a/ds-controller-board/device/device.go +++ b/ds-controller-board/device/device.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -6,8 +6,8 @@ package device import ( "fmt" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) // ControllerBoard is a common interface for controller boards to implement diff --git a/ds-controller-board/device/device_test.go b/ds-controller-board/device/device_test.go index 4a69473..7210973 100644 --- a/ds-controller-board/device/device_test.go +++ b/ds-controller-board/device/device_test.go @@ -1,7 +1,7 @@ //go:build all || physical // +build all physical -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -10,8 +10,8 @@ import ( "fmt" "testing" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/ds-controller-board/device/mocks/ControllerBoard.go b/ds-controller-board/device/mocks/ControllerBoard.go index bdb04a7..af05010 100644 --- a/ds-controller-board/device/mocks/ControllerBoard.go +++ b/ds-controller-board/device/mocks/ControllerBoard.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause // Code generated by mockery v1.0.0. DO NOT EDIT. diff --git a/ds-controller-board/device/physical.go b/ds-controller-board/device/physical.go index 9798455..fbb3a89 100644 --- a/ds-controller-board/device/physical.go +++ b/ds-controller-board/device/physical.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -9,9 +9,9 @@ import ( "strings" "time" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v2/common" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v3/common" "go.bug.st/serial.v1" "go.bug.st/serial.v1/enumerator" @@ -21,7 +21,7 @@ const ( deviceResource = "controller-board-status" ) -//ControllerBoardPhysical : A physical ControllerBoard that leverages an Arduino Micro-Controller for reading/writing sensor and input values. +// ControllerBoardPhysical : A physical ControllerBoard that leverages an Arduino Micro-Controller for reading/writing sensor and input values. type ControllerBoardPhysical struct { AsyncCh chan<- *dsModels.AsyncValues DevStatus string // uC -> Host : STATUS,L1,0,L2,0,D,0,T,78.58,H,19.54 @@ -112,12 +112,12 @@ func (board *ControllerBoardPhysical) Read() { } } -//GetStatus : Returns the ControllerBoard's JSON 'DevStatus' field as a String. +// GetStatus : Returns the ControllerBoard's JSON 'DevStatus' field as a String. func (board *ControllerBoardPhysical) GetStatus() string { return board.DevStatus } -//FindControllerBoard : Finds the ControllerBoards TTY URI (e.g. /dev/ttyACM0) based off of its PID and VID values. +// FindControllerBoard : Finds the ControllerBoards TTY URI (e.g. /dev/ttyACM0) based off of its PID and VID values. func FindControllerBoard(vid string, pid string) (string, error) { ports, err := enumerator.GetDetailedPortsList() if err != nil { @@ -135,7 +135,7 @@ func FindControllerBoard(vid string, pid string) (string, error) { return "", fmt.Errorf("no USB port found matching VID=%s & PID=%s", vid, pid) } -//OpenAndConfigureSerialPort : Opens the TTY URI (e.g. /dev/ttyACM0) as a Serial connection with the appropriate configuration (e.g. baud-rate, parity, data-bits, stop-bits, etc.). +// OpenAndConfigureSerialPort : Opens the TTY URI (e.g. /dev/ttyACM0) as a Serial connection with the appropriate configuration (e.g. baud-rate, parity, data-bits, stop-bits, etc.). func OpenAndConfigureSerialPort(ttyPort string) (serial.Port, error) { port, err := serial.Open(ttyPort, &serial.Mode{}) diff --git a/ds-controller-board/device/physical_test.go b/ds-controller-board/device/physical_test.go index 6208403..0b2d7a0 100644 --- a/ds-controller-board/device/physical_test.go +++ b/ds-controller-board/device/physical_test.go @@ -1,7 +1,7 @@ //go:build all || physical // +build all physical -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -11,8 +11,8 @@ import ( "os" "testing" - "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/ds-controller-board/device/virtual.go b/ds-controller-board/device/virtual.go index 2eb66dc..6941ad7 100644 --- a/ds-controller-board/device/virtual.go +++ b/ds-controller-board/device/virtual.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -8,9 +8,9 @@ import ( "fmt" "time" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v2/common" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v3/common" ) // ControllerBoardVirtual is a virtualized controller board that locally handles diff --git a/ds-controller-board/device/virtual_test.go b/ds-controller-board/device/virtual_test.go index d06a3fd..774770f 100644 --- a/ds-controller-board/device/virtual_test.go +++ b/ds-controller-board/device/virtual_test.go @@ -1,7 +1,7 @@ //go:build all || !physical // +build all !physical -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package device @@ -9,8 +9,8 @@ package device import ( "testing" - "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/ds-controller-board/driver/driver.go b/ds-controller-board/driver/driver.go index 481a407..6f73aac 100644 --- a/ds-controller-board/driver/driver.go +++ b/ds-controller-board/driver/driver.go @@ -1,21 +1,21 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package driver import ( + "errors" "fmt" "strconv" "time" "ds-controller-board/device" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/device-sdk-go/v2/pkg/service" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v2/common" - "github.com/edgexfoundry/go-mod-core-contracts/v2/models" - "github.com/pkg/errors" + "github.com/edgexfoundry/device-sdk-go/v3/pkg/interfaces" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v3/common" + "github.com/edgexfoundry/go-mod-core-contracts/v3/models" ) const ( @@ -42,30 +42,28 @@ type ControllerBoardDriver struct { displayTimeout time.Duration lockTimeout time.Duration - svc *service.DeviceService + svc interfaces.DeviceServiceSDK } // NewControllerBoardDeviceDriver allows EdgeX to initialize the // ControllerBoardDriver instance -func NewControllerBoardDeviceDriver() dsModels.ProtocolDriver { +func NewControllerBoardDeviceDriver() interfaces.ProtocolDriver { + return new(ControllerBoardDriver) } // Initialize is an EdgeX function that initializes the device -func (drv *ControllerBoardDriver) Initialize(lc logger.LoggingClient, asyncCh chan<- *dsModels.AsyncValues, deviceCh chan<- []dsModels.DiscoveredDevice) (err error) { - drv.lc = lc +func (drv *ControllerBoardDriver) Initialize(sdk interfaces.DeviceServiceSDK) (err error) { + drv.svc = sdk + drv.lc = sdk.LoggingClient() // Only setting if nil allows for unit testing with VirtualBoard enabled if drv.config == nil { - drv.svc = service.RunningService() - if drv.svc == nil { - return errors.New("custom controller board driver service is null") - } drv.config = &device.ServiceConfig{} err := drv.svc.LoadCustomConfig(drv.config, "DriverConfig") if err != nil { - return errors.Wrap(err, "custom driver configuration failed to load") + return fmt.Errorf("custom driver configuration failed to load: %w", err) } drv.displayTimeout, drv.lockTimeout, err = drv.config.Validate() if err != nil { @@ -78,7 +76,7 @@ func (drv *ControllerBoardDriver) Initialize(lc logger.LoggingClient, asyncCh ch drv.StopChannel = make(chan int) - drv.controllerBoard, err = device.NewControllerBoard(lc, asyncCh, &drv.config.DriverConfig) + drv.controllerBoard, err = device.NewControllerBoard(drv.lc, sdk.AsyncValuesChannel(), &drv.config.DriverConfig) if err != nil { return err } @@ -274,7 +272,22 @@ func (drv *ControllerBoardDriver) RemoveDevice(deviceName string, protocols map[ return nil } -// Stop stops a device +// Stops the device driver func (drv *ControllerBoardDriver) Stop(force bool) error { return nil } + +// Discover new devices +func (drv *ControllerBoardDriver) Discover() error { + return errors.New("driver's Discover function isn't implemented") +} + +// Starts the device driver +func (drv *ControllerBoardDriver) Start() error { + return nil +} + +// Validates new devices before adding it +func (drv *ControllerBoardDriver) ValidateDevice(device models.Device) error { + return nil +} diff --git a/ds-controller-board/driver/driver_test.go b/ds-controller-board/driver/driver_test.go index be755d8..5104372 100644 --- a/ds-controller-board/driver/driver_test.go +++ b/ds-controller-board/driver/driver_test.go @@ -1,7 +1,7 @@ //go:build all || !physical // +build all !physical -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package driver @@ -14,10 +14,11 @@ import ( "reflect" "testing" - dsModels "github.com/edgexfoundry/device-sdk-go/v2/pkg/models" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v2/common" - "github.com/edgexfoundry/go-mod-core-contracts/v2/models" + sdkMocks "github.com/edgexfoundry/device-sdk-go/v3/pkg/interfaces/mocks" + dsModels "github.com/edgexfoundry/device-sdk-go/v3/pkg/models" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" + edgexcommon "github.com/edgexfoundry/go-mod-core-contracts/v3/common" + "github.com/edgexfoundry/go-mod-core-contracts/v3/models" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -150,7 +151,11 @@ func CreateControllerBoardDriver(t *testing.T, virtual bool, initialize bool, ex } if initialize { - err = target.Initialize(lc, make(chan *dsModels.AsyncValues), make(chan<- []dsModels.DiscoveredDevice)) + mockSDK := &sdkMocks.DeviceServiceSDK{} + mockSDK.On("LoggingClient").Return(lc) + mockSDK.On("AsyncValuesChannel").Return(nil) + mockSDK.On("LoadCustomConfig", mock.Anything, mock.Anything).Return(nil) + err = target.Initialize(mockSDK) require.NoError(err) virtual, ok := target.controllerBoard.(*device.ControllerBoardVirtual) @@ -206,7 +211,11 @@ func TestControllerBoardDriver_Initialize(t *testing.T) { config: tt.config, } - err := drv.Initialize(tt.lc, make(chan *dsModels.AsyncValues), make(chan<- []dsModels.DiscoveredDevice)) + mockSDK := &sdkMocks.DeviceServiceSDK{} + mockSDK.On("LoggingClient").Return(mocklc) + mockSDK.On("AsyncValuesChannel").Return(nil) + mockSDK.On("LoadCustomConfig", mock.Anything, mock.Anything).Return(nil) + err := drv.Initialize(mockSDK) if tt.wantErr { require.Error(t, err) return diff --git a/ds-controller-board/go.mod b/ds-controller-board/go.mod index cb021b5..3556fd7 100644 --- a/ds-controller-board/go.mod +++ b/ds-controller-board/go.mod @@ -1,75 +1,78 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module ds-controller-board -go 1.18 +go 1.20 require ( - github.com/edgexfoundry/device-sdk-go/v2 v2.2.0 - github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 - github.com/pkg/errors v0.9.1 - github.com/stretchr/testify v1.8.0 + github.com/edgexfoundry/device-sdk-go/v3 v3.0.0 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 + github.com/stretchr/testify v1.8.2 go.bug.st/serial.v1 v0.0.0-20180827123349-5f7892a7bb45 ) require ( - bitbucket.org/bertimus9/systemstat v0.5.0 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect github.com/OneOfOne/xxhash v1.2.8 // indirect - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect + github.com/armon/go-metrics v0.3.10 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/creack/goselect v0.1.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.2 // indirect + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 // indirect + github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 // indirect github.com/fatih/color v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.4.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.13.0 // indirect github.com/go-redis/redis/v7 v7.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/consul/api v1.9.1 // indirect + github.com/hashicorp/consul/api v1.20.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v0.12.0 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/hashicorp/go-hclog v0.14.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/golang-lru v0.5.0 // indirect - github.com/hashicorp/serf v0.9.5 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/leodido/go-urn v1.2.3 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect - github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect - github.com/mitchellh/reflectwalk v1.0.0 // indirect - github.com/pebbe/zmq4 v1.2.7 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/nats-io/nats.go v1.25.0 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect - github.com/spiffe/go-spiffe/v2 v2.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/spiffe/go-spiffe/v2 v2.1.4 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/errs v1.2.2 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + github.com/zeebo/errs v1.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/ds-controller-board/go.sum b/ds-controller-board/go.sum index e414cce..ea0290f 100644 --- a/ds-controller-board/go.sum +++ b/ds-controller-board/go.sum @@ -1,336 +1,332 @@ -bitbucket.org/bertimus9/systemstat v0.5.0 h1:n0aLnh2Jo4nBUBym9cE5PJDG8GT6g+4VuS2Ya2jYYpA= -bitbucket.org/bertimus9/systemstat v0.5.0/go.mod h1:EkUWPp8lKFPMXP8vnbpT5JDI0W/sTiLZAvN8ONWErHY= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/creack/goselect v0.1.0 h1:4QiXIhcpSQF50XGaBsFzesjwX/1qOY5bOveQPmN9CXY= github.com/creack/goselect v0.1.0/go.mod h1:gHrIcH/9UZDn2qgeTUeW5K9eZsVYCH6/60J/FHysWyE= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= -github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edgexfoundry/device-sdk-go/v2 v2.2.0 h1:wapuEQwSSmJQfdHvVT0maxyyE6Y1QQXOMI4YgsFkOek= -github.com/edgexfoundry/device-sdk-go/v2 v2.2.0/go.mod h1:QRG3JZxLiuUirj4cvkYPVFu7WIZMJyn/TuT2nXtAqYc= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 h1:4UVNGRaKbkH5aEhQrto26Q65ydmhZYReRw/6ZNQ5J5E= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0/go.mod h1:JKRxVTC5g1IRoQuT6T7pW6O6XnfjQTZgFjEazPHAHng= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 h1:Sfi9jAIgRXZaJQw8Ji6+8//47D+iOyGiXQSNZXhy3HE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0/go.mod h1:jyfVSx7mI3u/o/oo10COxBRBvJ8O/9I3z2xAwPmNt/Q= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 h1:FdnA7hLq0U8PeMAIuJXt4KcXLAyGo7OjckzxTAwaoBc= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0/go.mod h1:+X6C0h8ZTJe+lLU2AGJfiAzCJK3zL+yM6cej9VC+79E= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 h1:Rqr1CgBXppAeehCkPAHQ6hjyLlm2KTR4IKiKpExm7gg= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0/go.mod h1:dQiOiga0KMGHXqFs4nI+Rp19hQR3gZ+3lDRgI9x5Q7M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/edgexfoundry/device-sdk-go/v3 v3.0.0 h1:CpHBsVkjxkZo3wtk/+xmic2XC6HU3MLG5/S51lcnd9E= +github.com/edgexfoundry/device-sdk-go/v3 v3.0.0/go.mod h1:z2C2nbnG7ZDwEyv3eA36olmlRkLUsYXEGgK6YcnpruI= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 h1:gXVxaZPcRJl2MhCIK/GOXZnQL+21xOUpGDTLTcVCxSk= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1/go.mod h1:Or09TpF5HF3FjlqX3kJEFhBCsTvbHY0Nu28UF0MvB3w= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 h1:rdk8KMcU8fA6o9MCb0O68bboxZTdLiXTZByNttEtRwE= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0/go.mod h1:8RlYm5CPzZgUsfXDWVP1TIeUMhsDNIdRdj1HXdomtOI= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 h1:xjwCI34DLM31cSl1q9XmYgXS3JqXufQJMgohnLLLDx0= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0/go.mod h1:zzzWGWij6wAqm1go9TLs++TFMIsBqBb1eRnIj4mRxGw= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 h1:nU37Uo4/kloTMrdqDN9SJuDoXb3FpHaMdwVbHtn9PPk= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0/go.mod h1:x2CueD9gn/CmtCvDNFgrgBnR+B1iWJMSrC5+gesfDJ0= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 h1:6LXGElSScCCQzNpR3WjcgVz0RUc9GbfxETvif/4++iI= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0/go.mod h1:SGyo4fAHzOhDAd2Usa9RaBT/sOzkbceIqLrDG0+iYy8= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 h1:XyoDjeeVBMNwlJb6ljcTOl1QOp5gabcJc7pYSPYKNPA= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1/go.mod h1:Ts9l+TknRKaqFsXmrTuKyV1Y5qIr+eiexVYkQuXnfxk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.13.0 h1:cFRQdfaSMCOSfGCCLB20MHvuoHb/s5G8L5pu2ppK5AQ= +github.com/go-playground/validator/v10 v10.13.0/go.mod h1:dwu7+CG8/CtBiJFZDz4e+5Upb6OLw04gtBYw0mcG/z4= github.com/go-redis/redis/v7 v7.3.0 h1:3oHqd0W7f/VLKBxeYTEpqdMUsmMectngjM9OtoRoIgg= github.com/go-redis/redis/v7 v7.3.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/consul/api v1.9.1 h1:SngrdG2L62qqLsUz85qcPhFZ78rPf8tcD5qjMgs6MME= -github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= +github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 h1:DcITQwl3ymmg7i1XfwpZFs/TPv2PuTwxE8bnuKVtKlk= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54/go.mod h1:dIfpPVUR+ZfkzkDcKnn+oPW1jKeXe4WlNWc7rIXOVxM= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= +github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE= +github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pebbe/zmq4 v1.2.7 h1:6EaX83hdFSRUEhgzSW1E/SPoTS3JeYZgYkBvwdcrA9A= -github.com/pebbe/zmq4 v1.2.7/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/spiffe/go-spiffe/v2 v2.0.0 h1:y6N7BZAxgaFZYELyrIdxSMm2e2tWpzgQewUts9h1hfM= -github.com/spiffe/go-spiffe/v2 v2.0.0/go.mod h1:TEfgrEcyFhuSuvqohJt6IxENUNeHfndWCCV1EX7UaVk= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spiffe/go-spiffe/v2 v2.1.4 h1:Z31Ycaf2Z5DF38sQGmp+iGKjBhBlSzfAq68bfy67Mxw= +github.com/spiffe/go-spiffe/v2 v2.1.4/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= -github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= go.bug.st/serial.v1 v0.0.0-20180827123349-5f7892a7bb45 h1:mACY1anK6HNCZtm/DK2Rf2ZPHggVqeB0+7rY9Gl6wyI= go.bug.st/serial.v1 v0.0.0-20180827123349-5f7892a7bb45/go.mod h1:dRSl/CVCTf56CkXgJMDOdSwNfo2g1orOGE/gBGdvjZw= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/ds-controller-board/main.go b/ds-controller-board/main.go index 75b9f87..5e4574e 100644 --- a/ds-controller-board/main.go +++ b/ds-controller-board/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -6,7 +6,7 @@ package main import ( "ds-controller-board/driver" - "github.com/edgexfoundry/device-sdk-go/v2/pkg/startup" + "github.com/edgexfoundry/device-sdk-go/v3/pkg/startup" ) const ( diff --git a/ds-controller-board/res/configuration.toml b/ds-controller-board/res/configuration.toml deleted file mode 100644 index 137f4e7..0000000 --- a/ds-controller-board/res/configuration.toml +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -MaxEventSize = 0 # value 0 unlimit the maximum event size that can be sent to message bus or core-data - -[Writable] -LogLevel = "INFO" - # InsecureSecrets are required for when Redis is used for message bus - [Writable.InsecureSecrets] - [Writable.InsecureSecrets.DB] - path = "redisdb" - [Writable.InsecureSecrets.DB.Secrets] - username = "" - password = "" - [Writable.Reading] - ReadingUnits = true - -[Service] -HealthCheckInterval = "10s" -Host = "localhost" -ServerBindAddr = "" # blank value defaults to Service.Host value -Port = 48097 -StartupMsg = "Device controller board started" -# MaxRequestSize limit the request body size in byte of put command -MaxRequestSize = 0 # value 0 unlimit the request size. -RequestTimeout = "5s" - [Service.CORSConfiguration] - EnableCORS = false - CORSAllowCredentials = false - CORSAllowedOrigin = "https://localhost" - CORSAllowedMethods = "GET, POST, PUT, PATCH, DELETE" - CORSAllowedHeaders = "Authorization, Accept, Accept-Language, Content-Language, Content-Type, X-Correlation-ID" - CORSExposeHeaders = "Cache-Control, Content-Language, Content-Length, Content-Type, Expires, Last-Modified, Pragma, X-Correlation-ID" - CORSMaxAge = 3600 - -[Registry] -Host = "localhost" -Port = 8500 -Type = "consul" - -[Clients] - [Clients.core-data] - Protocol = "http" - Host = "localhost" - Port = 59880 - - [Clients.core-metadata] - Protocol = "http" - Host = "localhost" - Port = 59881 - -[Device] -DataTransform = true -MaxCmdOps = 128 -MaxCmdValueLen = 256 -ProfilesDir = "./res/profiles" -DevicesDir = "./res/devices" -UpdateLastConnected = false -EnableAsyncReadings = true -AsyncBufferSize = 16 -Labels = [] -UseMessageBus = true - [Device.Discovery] - Enabled = false - Interval = "30s" - -[MessageQueue] -Protocol = "tcp" -Host = "localhost" -Port = 1883 -Type = "mqtt" -AuthMode = "none" -PublishTopicPrefix = "edgex/events/device" # /// will be added to this Publish Topic prefix - [MessageQueue.Optional] - ClientId = "ds-controller-board" - Qos = "0" # Quality of Sevice values are 0 (At most once), 1 (At least once) or 2 (Exactly once) - KeepAlive = "10" # Seconds (must be 2 or greater) - Retained = "false" - AutoReconnect = "true" - ConnectTimeout = "5" # Seconds - SkipCertVerify = "false" - -[DriverConfig] - DeviceName = "controller-board" - VID = "0000" - PID = "0000" - DisplayTimeout = "10s" - LockTimeout = "30s" - VirtualControllerBoard = true \ No newline at end of file diff --git a/ds-controller-board/res/configuration.yaml b/ds-controller-board/res/configuration.yaml new file mode 100644 index 0000000..8293d2e --- /dev/null +++ b/ds-controller-board/res/configuration.yaml @@ -0,0 +1,26 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +Writable: + LogLevel: INFO + +Service: + Host: localhost + Port: 48097 + StartupMsg: Device controller board started + +Device: + ProfilesDir: ./res/profiles + DevicesDir: ./res/devices + +MessageBus: + Optional: + ClientId: ds-controller-board + +DriverConfig: + DeviceName: controller-board + VID: 0000 + PID: 0000 + DisplayTimeout: 10s + LockTimeout: 30s + VirtualControllerBoard: true \ No newline at end of file diff --git a/ds-controller-board/res/devices/device-list.toml b/ds-controller-board/res/devices/device-list.toml deleted file mode 100644 index 31211b5..0000000 --- a/ds-controller-board/res/devices/device-list.toml +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -# Pre-define Devices -[[DeviceList]] - Name = 'controller-board' - ProfileName = 'ds-controller-board' - [DeviceList.Protocols] - [DeviceList.Protocols.other] - #TODO: move protocol properties from configuration.toml to here - [[DeviceList.AutoEvents]] - Interval = '3s' - OnChange = true - SourceName = 'controller-board-status' \ No newline at end of file diff --git a/ds-controller-board/res/devices/device-list.yaml b/ds-controller-board/res/devices/device-list.yaml new file mode 100644 index 0000000..05f93de --- /dev/null +++ b/ds-controller-board/res/devices/device-list.yaml @@ -0,0 +1,15 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +# Pre-define Devices +deviceList: + - name: controller-board + profileName: ds-controller-board + protocols: + other: + Address: ds-controller-board + Port: 48097 + autoEvents: + - interval: 3s + onChange: true + sourceName: controller-board-status diff --git a/ds-controller-board/res/profiles/ds-controller-board.yaml b/ds-controller-board/res/profiles/ds-controller-board.yaml index 83de1f5..9e089fb 100644 --- a/ds-controller-board/res/profiles/ds-controller-board.yaml +++ b/ds-controller-board/res/profiles/ds-controller-board.yaml @@ -1,5 +1,5 @@ --- -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause name: "ds-controller-board" diff --git a/ds-cv-inference/.golangci.yml b/ds-cv-inference/.golangci.yml index 0de07d8..3c39ddb 100644 --- a/ds-cv-inference/.golangci.yml +++ b/ds-cv-inference/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: diff --git a/ds-cv-inference/Dockerfile b/ds-cv-inference/Dockerfile index b490147..1c23cc7 100644 --- a/ds-cv-inference/Dockerfile +++ b/ds-cv-inference/Dockerfile @@ -1,34 +1,26 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -ARG OPENVINO_BASE=ubuntu20_dev -ARG OPENVINO_VERSION=2022.2.0 -ARG OPENCV_VERSION=4.5.2 - -FROM gocv/opencv:${OPENCV_VERSION} AS gocv - -FROM openvino/${OPENVINO_BASE}:${OPENVINO_VERSION} - -# required for installing dependencies -USER root - -COPY --from=gocv /usr/local /usr/local - -RUN cd /opt/intel/openvino && \ - install_dependencies/install_openvino_dependencies.sh -c=opencv_req -c=opencv_opt -y +FROM gocv/opencv:4.5.2 ENV GOPATH /go -ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH -RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" +RUN go get -u -d gocv.io/x/gocv + +WORKDIR /tmp +RUN wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB +RUN apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB && apt-key list +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +RUN echo "deb https://apt.repos.intel.com/openvino/2021 all main" | tee /etc/apt/sources.list.d/intel-openvino-2021.list +RUN apt update +RUN apt install intel-openvino-dev-ubuntu18-2021.3.394 -y -RUN apt-get update && apt-get install libgtk2.0-dev libgtk-3-dev libjpeg62 -y +RUN apt install libgtk-3-dev -y WORKDIR /go/src/ds-cv-inference COPY . /go/src/ds-cv-inference RUN go mod tidy -RUN go mod download -RUN /bin/bash -c "source /opt/intel/openvino/setupvars.sh && echo building ds-cv-inference... && go build -o ds-cv-inference" && \ - chmod +x entrypoint.sh +RUN /bin/bash -c "source /opt/intel/openvino_2021/bin/setupvars.sh && go build -o ds-cv-inference" +RUN chmod +x entrypoint.sh ENTRYPOINT ["./entrypoint.sh"] diff --git a/ds-cv-inference/LICENSE b/ds-cv-inference/LICENSE index 7c1aef1..df5d5be 100644 --- a/ds-cv-inference/LICENSE +++ b/ds-cv-inference/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/ds-cv-inference/Makefile b/ds-cv-inference/Makefile index 58e9d19..ee0bbc9 100644 --- a/ds-cv-inference/Makefile +++ b/ds-cv-inference/Makefile @@ -1,9 +1,9 @@ -# Copyright © 2020 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build run down -MICROSERVICE=automated-checkout/ds-cv-inference +MICROSERVICE=automated-vending/ds-cv-inference tidy: go mod tidy diff --git a/ds-cv-inference/docker-compose.yml b/ds-cv-inference/docker-compose.yml index 0fb84ca..eb91173 100644 --- a/ds-cv-inference/docker-compose.yml +++ b/ds-cv-inference/docker-compose.yml @@ -1,6 +1,6 @@ --- -# Copyright © 2020 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause version: '3.4' @@ -8,7 +8,7 @@ version: '3.4' services: ds-cv-inference: - image: automated-checkout/ds-cv-inference:dev + image: automated-vending/ds-cv-inference:dev command: ["/go/src/ds-cv-inference/images","127.0.0.1:1883","0.85","/go/src/ds-cv-inference/skumapping.json"] ports: - "127.0.0.1:9005:9005" diff --git a/ds-cv-inference/entrypoint.sh b/ds-cv-inference/entrypoint.sh index 41b0450..57d10a2 100755 --- a/ds-cv-inference/entrypoint.sh +++ b/ds-cv-inference/entrypoint.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright © 2020 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause set -e @@ -10,9 +10,6 @@ CONFIDENCE=$3 SKUS=$4 -source /opt/intel/openvino/setupvars.sh +source /opt/intel/openvino_2021/bin/setupvars.sh -/go/src/ds-cv-inference/ds-cv-inference -dir $DIR -mqtt $MQTT -skuMapping $SKUS \ - -model /go/src/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.bin \ - -config /go/src/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.xml \ - -confidence $CONFIDENCE +/go/src/ds-cv-inference/ds-cv-inference -dir $DIR -mqtt $MQTT -skuMapping $SKUS -model /go/src/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.bin -config /go/src/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.xml -confidence $CONFIDENCE diff --git a/ds-cv-inference/go.mod b/ds-cv-inference/go.mod index 8b115a3..af22086 100644 --- a/ds-cv-inference/go.mod +++ b/ds-cv-inference/go.mod @@ -1,19 +1,19 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module ds-cv-inference -go 1.18 +go 1.20 require ( github.com/eclipse/paho.mqtt.golang v1.2.0 github.com/stretchr/testify v1.8.0 - gocv.io/x/gocv v0.31.0 + gocv.io/x/gocv v0.27.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/net v0.7.0 // indirect + golang.org/x/net v0.17.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/ds-cv-inference/go.sum b/ds-cv-inference/go.sum index 288a09e..427a4fe 100644 --- a/ds-cv-inference/go.sum +++ b/ds-cv-inference/go.sum @@ -3,7 +3,6 @@ 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/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/hybridgroup/mjpeg v0.0.0-20140228234708-4680f319790e/go.mod h1:eagM805MRKrioHYuU7iKLUyFPVKqVV6um5DAvCkUtXs= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -12,10 +11,10 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -gocv.io/x/gocv v0.31.0 h1:BHDtK8v+YPvoSPQTTiZB2fM/7BLg6511JqkruY2z6LQ= -gocv.io/x/gocv v0.31.0/go.mod h1:oc6FvfYqfBp99p+yOEzs9tbYF9gOrAQSeL/dyIPefJU= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +gocv.io/x/gocv v0.27.0 h1:3X8I74ULsWHd4m7DQRv2Nqx5VkKscfUFnKgLNodiboI= +gocv.io/x/gocv v0.27.0/go.mod h1:n4LnYjykU6y9gn48yZf4eLCdtuSb77XxSkW6g0wGf/A= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/ds-cv-inference/inference/inference.go b/ds-cv-inference/inference/inference.go index 6a6a92c..9b499b8 100644 --- a/ds-cv-inference/inference/inference.go +++ b/ds-cv-inference/inference/inference.go @@ -1,4 +1,4 @@ -// Copyright © 2020 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package inference @@ -10,7 +10,7 @@ import ( "fmt" "image" "image/color" - "io/ioutil" + "os" "gocv.io/x/gocv" ) @@ -95,8 +95,6 @@ func StartInference(inferenceDeltasChannel chan []byte, InferenceDoorOpenChannel } defer net.Close() - fmt.Println("gocv ReadNet successfully") - // OpenVINO backend if err := net.SetPreferableBackend(gocv.NetBackendOpenVINO); err != nil { fmt.Printf("Unable to set Net backend: %v\n", gocv.NetBackendOpenVINO) @@ -108,7 +106,7 @@ func StartInference(inferenceDeltasChannel chan []byte, InferenceDoorOpenChannel return } - fmt.Printf("Start reading...") + fmt.Println("Start reading...") fromImages(imageSequence, net, inferenceDeltasChannel, InferenceDoorOpenChannel, confidenceThreshold, skuMap) } @@ -267,7 +265,7 @@ func calculateDelta(originalCount map[string]int, afterCount map[string]int, sku } func countImages(directory string) (int, error) { - files, err := ioutil.ReadDir(directory) + files, err := os.ReadDir(directory) if err != nil { fmt.Printf("Error opening directory: %v\n", directory) return 0, err diff --git a/ds-cv-inference/main.go b/ds-cv-inference/main.go index 6bf8d2d..b547628 100644 --- a/ds-cv-inference/main.go +++ b/ds-cv-inference/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -10,7 +10,6 @@ import ( "encoding/json" "flag" "fmt" - "io/ioutil" "log" "net/http" "os" @@ -31,19 +30,16 @@ func main() { flag.Parse() //Read skuMappingJSON - skuMappingJSONFile, err := os.Open(*skuMapping) + skuMappingJSONByte, err := os.ReadFile(*skuMapping) if err != nil { fmt.Printf("Error reading from SKU Mapping file: %v\n", *skuMapping) os.Exit(1) } - defer skuMappingJSONFile.Close() - - skuMappingJSONByte, _ := ioutil.ReadAll(skuMappingJSONFile) inferenceInit(*directory, *model, *configFile, *confidence, skuMappingJSONByte) mqttConnection := mqtt.NewMqttConnection(*mqttAddress) - mqttConnection.SubscribeToAutomatedCheckout() + mqttConnection.SubscribeToAutomatedVending() defer mqttConnection.Disconnect() inference.Stream = mjpeg.NewStream() @@ -56,17 +52,13 @@ func main() { } func updateMjpegServer() { - for img := range inference.StreamChannel { buf, err := gocv.IMEncode(".jpg", img) if err != nil { fmt.Println("error on IMEncode JPG with image: ", err.Error()) os.Exit(1) } - defer buf.Close() - - inference.Stream.UpdateJPEG(buf.GetBytes()) - + inference.Stream.UpdateJPEG(buf) } } diff --git a/ds-cv-inference/mjpeg/mjpeg.go b/ds-cv-inference/mjpeg/mjpeg.go index 21f17f3..fcae3c9 100644 --- a/ds-cv-inference/mjpeg/mjpeg.go +++ b/ds-cv-inference/mjpeg/mjpeg.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package mjpeg diff --git a/ds-cv-inference/mqtt/mqtt.go b/ds-cv-inference/mqtt/mqtt.go index 3ba6bcc..ab07342 100644 --- a/ds-cv-inference/mqtt/mqtt.go +++ b/ds-cv-inference/mqtt/mqtt.go @@ -1,4 +1,4 @@ -// Copyright © 2020 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package mqtt @@ -9,6 +9,7 @@ import ( "fmt" "net/http" "os" + "strings" "sync" "time" @@ -16,7 +17,7 @@ import ( ) const ( - commandTopic = "Inference/CommandTopic" + commandTopic = "Inference/CommandTopic/#" responseTopic = "Inference/ResponseTopic" dataTopic = "Inference/DataTopic" retryCount = 5 @@ -56,42 +57,64 @@ func NewMqttConnection(connectionString string) Connection { return mc } -//define a function for the default message handler +// define a function for the default message handler var commandTopicFunction MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) { - var edgeXMessage map[string]string if err := json.Unmarshal(msg.Payload(), &edgeXMessage); err != nil { fmt.Println(http.StatusBadRequest, "Failed to unmarshal body") return } - fmt.Printf("received message: %v+", edgeXMessage) + fmt.Printf("received message on topic %s: %v+\n", msg.Topic(), edgeXMessage) + + words := strings.Split(msg.Topic(), "/") + numWords := len(words) + if numWords > 5 { + fmt.Println(http.StatusBadRequest, fmt.Sprintf("mqtt command topic not formatted for EdgeX 3.0: %s", msg.Topic())) + return + } + + cmd := words[numWords-3] + method := words[numWords-2] + uuid := words[numWords-1] + publishTopic := fmt.Sprintf("%s/%s", responseTopic, uuid) - switch edgeXMessage["cmd"] { + responseMessage := make(map[string]string) + + switch cmd { case "inferenceHeartbeat": { - pingMessage := edgeXMessage - pingMessage["inferenceHeartbeat"] = "inferencePong" - pongMessage, err := json.Marshal(pingMessage) + if !strings.EqualFold(method, "get") { + fmt.Println(http.StatusBadRequest, fmt.Sprintf("expected mqtt to have the method GET, got %s in the topic, %s", method, msg.Topic())) + return + } + responseMessage["inferenceHeartbeat"] = "inferencePong" + + data, err := json.Marshal(responseMessage) if err != nil { fmt.Println("Failed to marshal mqtt message") } - token := client.Publish(responseTopic, 0, false, pongMessage) + token := client.Publish(publishTopic, 0, false, data) token.Wait() + fmt.Printf("Published pong message to %s\n", publishTopic) } case "inferenceDoorStatus": { - pingMessage := edgeXMessage - isDoorClosed := pingMessage["inferenceDoorStatus"] - pingMessage["inferenceDoorStatus"] = "Got it!" + if !strings.EqualFold(method, "set") { + fmt.Println(http.StatusBadRequest, fmt.Sprintf("expected mqtt to have the method SET, got %s in the topic, %s", method, msg.Topic())) + return + } + isDoorClosed := edgeXMessage["inferenceDoorStatus"] + responseMessage["inferenceDoorStatus"] = "Got it!" - pongMessage, err := json.Marshal(pingMessage) + data, err := json.Marshal(responseMessage) if err != nil { fmt.Println("Failed to marshal mqtt message") } - token := client.Publish(responseTopic, 0, false, pongMessage) + token := client.Publish(publishTopic, 0, false, data) token.Wait() + fmt.Printf("Published inference door status message to %s\n", publishTopic) checkDoorStatus(isDoorClosed, client) } default: @@ -141,17 +164,14 @@ func checkDoorStatus(isDoorClosed string, client MQTT.Client) { func SendDeltaData(client MQTT.Client, delta []byte) { cmdSKUDelta := "inferenceSkuDelta" - + publishTopic := fmt.Sprintf("%s/%s/%s", dataTopic, "Inference-device", cmdSKUDelta) edgeXMessage := make(map[string]string) - edgeXMessage["name"] = "Inference-device" - edgeXMessage["cmd"] = cmdSKUDelta - edgeXMessage["method"] = "get" edgeXMessage[cmdSKUDelta] = string(delta) deltaMessage, _ := json.Marshal(edgeXMessage) - fmt.Println("Final deltaMessage is ", string(deltaMessage)) - token := client.Publish(dataTopic, 0, false, deltaMessage) + token := client.Publish(publishTopic, 0, false, deltaMessage) token.Wait() + fmt.Println("published deltaMessage ", string(deltaMessage), " to topic ", publishTopic) } func (mqttCon *Connection) Connect(connectionString string) { @@ -173,7 +193,7 @@ func (mqttCon *Connection) Connect(connectionString string) { } } -func (mqttCon *Connection) SubscribeToAutomatedCheckout() { +func (mqttCon *Connection) SubscribeToAutomatedVending() { //subscribe to the topic inference/CommandTopic and handle messages in the commandTopicFunction attempts := 0 for attempts < retryCount { diff --git a/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.bin b/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.bin index 092ee2c..5dcbb48 100644 Binary files a/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.bin and b/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.bin differ diff --git a/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.xml b/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.xml index 772b590..03855c1 100644 --- a/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.xml +++ b/ds-cv-inference/product-detection-0001/FP32/product-detection-0001.xml @@ -1,25 +1,19 @@ - + - - - - + - + 1 3 512 512 - - - - - + + 1 @@ -29,20 +23,16 @@ - + - - - - - + 1 3 512 512 - + 1 1 1 @@ -58,8 +48,8 @@ - - + + 1 @@ -69,19 +59,16 @@ - + - - - - + 1 3 512 512 - + 1 3 1 @@ -97,8 +84,8 @@ - - + + 1 @@ -108,19 +95,16 @@ - + - - - - + 1 3 512 512 - + 1 3 1 @@ -128,7 +112,7 @@ - + 1 3 512 @@ -136,10 +120,10 @@ - - + + - + 32 3 3 @@ -147,19 +131,16 @@ - - - - - + + - + 1 3 512 512 - + 32 3 3 @@ -175,8 +156,8 @@ - - + + 1 @@ -186,19 +167,16 @@ - + - - - - + 1 32 256 256 - + 1 32 1 @@ -206,7 +184,7 @@ - + 1 32 256 @@ -215,11 +193,8 @@ - - - - + 1 32 256 @@ -227,7 +202,7 @@ - + 1 32 256 @@ -235,10 +210,10 @@ - - + + - + 32 1 1 @@ -247,19 +222,16 @@ - - - - - + + - + 1 32 256 256 - + 32 1 1 @@ -268,7 +240,7 @@ - + 1 32 256 @@ -276,8 +248,8 @@ - - + + 1 @@ -287,19 +259,16 @@ - + - - - - + 1 32 256 256 - + 1 32 1 @@ -307,7 +276,7 @@ - + 1 32 256 @@ -316,12 +285,9 @@ - - - - + - + 1 32 256 @@ -329,7 +295,7 @@ - + 1 32 256 @@ -337,10 +303,10 @@ - - + + - + 16 32 1 @@ -348,19 +314,16 @@ - - - - - + + - + 1 32 256 256 - + 16 32 1 @@ -376,8 +339,8 @@ - - + + 1 @@ -387,19 +350,16 @@ - + - - - - + 1 16 256 256 - + 1 16 1 @@ -407,7 +367,7 @@ - + 1 16 256 @@ -415,10 +375,10 @@ - - + + - + 96 16 1 @@ -426,19 +386,16 @@ - - - - - + + - + 1 16 256 256 - + 96 16 1 @@ -454,8 +411,8 @@ - - + + 1 @@ -465,19 +422,16 @@ - + - - - - + 1 96 256 256 - + 1 96 1 @@ -485,7 +439,7 @@ - + 1 96 256 @@ -494,12 +448,9 @@ - - - - + - + 1 96 256 @@ -507,7 +458,7 @@ - + 1 96 256 @@ -515,10 +466,10 @@ - - + + - + 96 1 1 @@ -527,19 +478,16 @@ - - - - - + + - + 1 96 256 256 - + 96 1 1 @@ -548,7 +496,7 @@ - + 1 96 128 @@ -556,8 +504,8 @@ - - + + 1 @@ -567,19 +515,16 @@ - + - - - - + 1 96 128 128 - + 1 96 1 @@ -587,7 +532,7 @@ - + 1 96 128 @@ -596,12 +541,9 @@ - - - - + - + 1 96 128 @@ -609,7 +551,7 @@ - + 1 96 128 @@ -617,10 +559,10 @@ - - + + - + 24 96 1 @@ -628,19 +570,16 @@ - - - - - + + - + 1 96 128 128 - + 24 96 1 @@ -656,8 +595,8 @@ - - + + 1 @@ -667,19 +606,16 @@ - + - - - - + 1 24 128 128 - + 1 24 1 @@ -687,7 +623,7 @@ - + 1 24 128 @@ -695,10 +631,10 @@ - - + + - + 144 24 1 @@ -706,19 +642,16 @@ - - - - - + + - + 1 24 128 128 - + 144 24 1 @@ -734,8 +667,8 @@ - - + + 1 @@ -745,19 +678,16 @@ - + - - - - + 1 144 128 128 - + 1 144 1 @@ -765,7 +695,7 @@ - + 1 144 128 @@ -774,12 +704,9 @@ - - - - + - + 1 144 128 @@ -787,7 +714,7 @@ - + 1 144 128 @@ -795,10 +722,10 @@ - - + + - + 144 1 1 @@ -807,19 +734,16 @@ - - - - - + + - + 1 144 128 128 - + 144 1 1 @@ -828,7 +752,7 @@ - + 1 144 128 @@ -836,8 +760,8 @@ - - + + 1 @@ -847,19 +771,16 @@ - + - - - - + 1 144 128 128 - + 1 144 1 @@ -867,7 +788,7 @@ - + 1 144 128 @@ -876,12 +797,9 @@ - - - - + - + 1 144 128 @@ -889,7 +807,7 @@ - + 1 144 128 @@ -897,10 +815,10 @@ - - + + - + 24 144 1 @@ -908,19 +826,16 @@ - - - - - + + - + 1 144 128 128 - + 24 144 1 @@ -936,8 +851,8 @@ - - + + 1 @@ -947,19 +862,16 @@ - + - - - - + 1 24 128 128 - + 1 24 1 @@ -967,7 +879,7 @@ - + 1 24 128 @@ -977,17 +889,14 @@ - - - - + 1 24 128 128 - + 1 24 128 @@ -995,7 +904,7 @@ - + 1 24 128 @@ -1003,10 +912,10 @@ - - + + - + 144 24 1 @@ -1014,19 +923,16 @@ - - - - - + + - + 1 24 128 128 - + 144 24 1 @@ -1042,8 +948,8 @@ - - + + 1 @@ -1053,19 +959,16 @@ - + - - - - + 1 144 128 128 - + 1 144 1 @@ -1073,7 +976,7 @@ - + 1 144 128 @@ -1082,12 +985,9 @@ - - - - + - + 1 144 128 @@ -1095,7 +995,7 @@ - + 1 144 128 @@ -1103,10 +1003,10 @@ - - + + - + 144 1 1 @@ -1115,19 +1015,16 @@ - - - - - + + - + 1 144 128 128 - + 144 1 1 @@ -1136,7 +1033,7 @@ - + 1 144 64 @@ -1144,8 +1041,8 @@ - - + + 1 @@ -1155,19 +1052,16 @@ - + - - - - + 1 144 64 64 - + 1 144 1 @@ -1175,7 +1069,7 @@ - + 1 144 64 @@ -1184,12 +1078,9 @@ - - - - + - + 1 144 64 @@ -1197,7 +1088,7 @@ - + 1 144 64 @@ -1205,10 +1096,10 @@ - - + + - + 32 144 1 @@ -1216,19 +1107,16 @@ - - - - - + + - + 1 144 64 64 - + 32 144 1 @@ -1244,8 +1132,8 @@ - - + + 1 @@ -1255,19 +1143,16 @@ - + - - - - + 1 32 64 64 - + 1 32 1 @@ -1275,7 +1160,7 @@ - + 1 32 64 @@ -1283,10 +1168,10 @@ - - + + - + 192 32 1 @@ -1294,19 +1179,16 @@ - - - - - + + - + 1 32 64 64 - + 192 32 1 @@ -1322,8 +1204,8 @@ - - + + 1 @@ -1333,19 +1215,16 @@ - + - - - - + 1 192 64 64 - + 1 192 1 @@ -1353,7 +1232,7 @@ - + 1 192 64 @@ -1362,12 +1241,9 @@ - - - - + - + 1 192 64 @@ -1375,7 +1251,7 @@ - + 1 192 64 @@ -1383,10 +1259,10 @@ - - + + - + 192 1 1 @@ -1395,19 +1271,16 @@ - - - - - + + - + 1 192 64 64 - + 192 1 1 @@ -1416,7 +1289,7 @@ - + 1 192 64 @@ -1424,8 +1297,8 @@ - - + + 1 @@ -1435,19 +1308,16 @@ - + - - - - + 1 192 64 64 - + 1 192 1 @@ -1455,7 +1325,7 @@ - + 1 192 64 @@ -1464,12 +1334,9 @@ - - - - + - + 1 192 64 @@ -1477,7 +1344,7 @@ - + 1 192 64 @@ -1485,10 +1352,10 @@ - - + + - + 32 192 1 @@ -1496,19 +1363,16 @@ - - - - - + + - + 1 192 64 64 - + 32 192 1 @@ -1524,8 +1388,8 @@ - - + + 1 @@ -1535,19 +1399,16 @@ - + - - - - + 1 32 64 64 - + 1 32 1 @@ -1555,7 +1416,7 @@ - + 1 32 64 @@ -1565,17 +1426,14 @@ - - - - + 1 32 64 64 - + 1 32 64 @@ -1583,7 +1441,7 @@ - + 1 32 64 @@ -1591,10 +1449,10 @@ - - + + - + 192 32 1 @@ -1602,19 +1460,16 @@ - - - - - + + - + 1 32 64 64 - + 192 32 1 @@ -1630,8 +1485,8 @@ - - + + 1 @@ -1641,19 +1496,16 @@ - + - - - - + 1 192 64 64 - + 1 192 1 @@ -1661,7 +1513,7 @@ - + 1 192 64 @@ -1670,12 +1522,9 @@ - - - - + - + 1 192 64 @@ -1683,7 +1532,7 @@ - + 1 192 64 @@ -1691,10 +1540,10 @@ - - + + - + 192 1 1 @@ -1703,19 +1552,16 @@ - - - - - + + - + 1 192 64 64 - + 192 1 1 @@ -1724,7 +1570,7 @@ - + 1 192 64 @@ -1732,8 +1578,8 @@ - - + + 1 @@ -1743,19 +1589,16 @@ - + - - - - + 1 192 64 64 - + 1 192 1 @@ -1763,7 +1606,7 @@ - + 1 192 64 @@ -1772,12 +1615,9 @@ - - - - + - + 1 192 64 @@ -1785,7 +1625,7 @@ - + 1 192 64 @@ -1793,10 +1633,10 @@ - - + + - + 32 192 1 @@ -1804,19 +1644,16 @@ - - - - - + + - + 1 192 64 64 - + 32 192 1 @@ -1832,8 +1669,8 @@ - - + + 1 @@ -1843,19 +1680,16 @@ - + - - - - + 1 32 64 64 - + 1 32 1 @@ -1863,7 +1697,7 @@ - + 1 32 64 @@ -1873,17 +1707,14 @@ - - - - + 1 32 64 64 - + 1 32 64 @@ -1891,7 +1722,7 @@ - + 1 32 64 @@ -1899,10 +1730,10 @@ - - + + - + 192 32 1 @@ -1910,19 +1741,16 @@ - - - - - + + - + 1 32 64 64 - + 192 32 1 @@ -1938,8 +1766,8 @@ - - + + 1 @@ -1949,19 +1777,16 @@ - + - - - - + 1 192 64 64 - + 1 192 1 @@ -1969,7 +1794,7 @@ - + 1 192 64 @@ -1978,12 +1803,9 @@ - - - - + - + 1 192 64 @@ -1991,7 +1813,7 @@ - + 1 192 64 @@ -1999,10 +1821,10 @@ - - + + - + 192 1 1 @@ -2011,19 +1833,16 @@ - - - - - + + - + 1 192 64 64 - + 192 1 1 @@ -2032,7 +1851,7 @@ - + 1 192 32 @@ -2040,8 +1859,8 @@ - - + + 1 @@ -2051,19 +1870,16 @@ - + - - - - + 1 192 32 32 - + 1 192 1 @@ -2071,7 +1887,7 @@ - + 1 192 32 @@ -2080,12 +1896,9 @@ - - - - + - + 1 192 32 @@ -2093,7 +1906,7 @@ - + 1 192 32 @@ -2101,10 +1914,10 @@ - - + + - + 64 192 1 @@ -2112,19 +1925,16 @@ - - - - - + + - + 1 192 32 32 - + 64 192 1 @@ -2140,8 +1950,8 @@ - - + + 1 @@ -2151,19 +1961,16 @@ - + - - - - + 1 64 32 32 - + 1 64 1 @@ -2171,7 +1978,7 @@ - + 1 64 32 @@ -2179,10 +1986,10 @@ - - + + - + 384 64 1 @@ -2190,19 +1997,16 @@ - - - - - + + - + 1 64 32 32 - + 384 64 1 @@ -2218,8 +2022,8 @@ - - + + 1 @@ -2229,19 +2033,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -2249,7 +2050,7 @@ - + 1 384 32 @@ -2258,12 +2059,9 @@ - - - - + - + 1 384 32 @@ -2271,7 +2069,7 @@ - + 1 384 32 @@ -2279,10 +2077,10 @@ - - + + - + 384 1 1 @@ -2291,19 +2089,16 @@ - - - - - + + - + 1 384 32 32 - + 384 1 1 @@ -2312,7 +2107,7 @@ - + 1 384 32 @@ -2320,8 +2115,8 @@ - - + + 1 @@ -2331,19 +2126,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -2351,7 +2143,7 @@ - + 1 384 32 @@ -2360,12 +2152,9 @@ - - - - + - + 1 384 32 @@ -2373,7 +2162,7 @@ - + 1 384 32 @@ -2381,10 +2170,10 @@ - - + + - + 64 384 1 @@ -2392,19 +2181,16 @@ - - - - - + + - + 1 384 32 32 - + 64 384 1 @@ -2420,8 +2206,8 @@ - - + + 1 @@ -2431,19 +2217,16 @@ - + - - - - + 1 64 32 32 - + 1 64 1 @@ -2451,7 +2234,7 @@ - + 1 64 32 @@ -2461,17 +2244,14 @@ - - - - + 1 64 32 32 - + 1 64 32 @@ -2479,7 +2259,7 @@ - + 1 64 32 @@ -2487,10 +2267,10 @@ - - + + - + 384 64 1 @@ -2498,19 +2278,16 @@ - - - - - + + - + 1 64 32 32 - + 384 64 1 @@ -2526,8 +2303,8 @@ - - + + 1 @@ -2537,19 +2314,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -2557,7 +2331,7 @@ - + 1 384 32 @@ -2566,12 +2340,9 @@ - - - - + - + 1 384 32 @@ -2579,7 +2350,7 @@ - + 1 384 32 @@ -2587,10 +2358,10 @@ - - + + - + 384 1 1 @@ -2599,19 +2370,16 @@ - - - - - + + - + 1 384 32 32 - + 384 1 1 @@ -2620,7 +2388,7 @@ - + 1 384 32 @@ -2628,8 +2396,8 @@ - - + + 1 @@ -2639,19 +2407,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -2659,7 +2424,7 @@ - + 1 384 32 @@ -2668,12 +2433,9 @@ - - - - + - + 1 384 32 @@ -2681,7 +2443,7 @@ - + 1 384 32 @@ -2689,10 +2451,10 @@ - - + + - + 64 384 1 @@ -2700,19 +2462,16 @@ - - - - - + + - + 1 384 32 32 - + 64 384 1 @@ -2728,8 +2487,8 @@ - - + + 1 @@ -2739,19 +2498,16 @@ - + - - - - + 1 64 32 32 - + 1 64 1 @@ -2759,7 +2515,7 @@ - + 1 64 32 @@ -2769,17 +2525,14 @@ - - - - + 1 64 32 32 - + 1 64 32 @@ -2787,7 +2540,7 @@ - + 1 64 32 @@ -2795,10 +2548,10 @@ - - + + - + 384 64 1 @@ -2806,19 +2559,16 @@ - - - - - + + - + 1 64 32 32 - + 384 64 1 @@ -2834,8 +2584,8 @@ - - + + 1 @@ -2845,19 +2595,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -2865,7 +2612,7 @@ - + 1 384 32 @@ -2874,12 +2621,9 @@ - - - - + - + 1 384 32 @@ -2887,7 +2631,7 @@ - + 1 384 32 @@ -2895,10 +2639,10 @@ - - + + - + 384 1 1 @@ -2907,19 +2651,16 @@ - - - - - + + - + 1 384 32 32 - + 384 1 1 @@ -2928,7 +2669,7 @@ - + 1 384 32 @@ -2936,8 +2677,8 @@ - - + + 1 @@ -2947,19 +2688,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -2967,7 +2705,7 @@ - + 1 384 32 @@ -2976,12 +2714,9 @@ - - - - + - + 1 384 32 @@ -2989,7 +2724,7 @@ - + 1 384 32 @@ -2997,10 +2732,10 @@ - - + + - + 64 384 1 @@ -3008,19 +2743,16 @@ - - - - - + + - + 1 384 32 32 - + 64 384 1 @@ -3036,8 +2768,8 @@ - - + + 1 @@ -3047,19 +2779,16 @@ - + - - - - + 1 64 32 32 - + 1 64 1 @@ -3067,7 +2796,7 @@ - + 1 64 32 @@ -3077,17 +2806,14 @@ - - - - + 1 64 32 32 - + 1 64 32 @@ -3095,7 +2821,7 @@ - + 1 64 32 @@ -3103,10 +2829,10 @@ - - + + - + 384 64 1 @@ -3114,19 +2840,16 @@ - - - - - + + - + 1 64 32 32 - + 384 64 1 @@ -3142,8 +2865,8 @@ - - + + 1 @@ -3153,19 +2876,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -3173,7 +2893,7 @@ - + 1 384 32 @@ -3182,12 +2902,9 @@ - - - - + - + 1 384 32 @@ -3195,7 +2912,7 @@ - + 1 384 32 @@ -3203,10 +2920,10 @@ - - + + - + 384 1 1 @@ -3215,19 +2932,16 @@ - - - - - + + - + 1 384 32 32 - + 384 1 1 @@ -3236,7 +2950,7 @@ - + 1 384 32 @@ -3244,8 +2958,8 @@ - - + + 1 @@ -3255,19 +2969,16 @@ - + - - - - + 1 384 32 32 - + 1 384 1 @@ -3275,7 +2986,7 @@ - + 1 384 32 @@ -3284,12 +2995,9 @@ - - - - + - + 1 384 32 @@ -3297,7 +3005,7 @@ - + 1 384 32 @@ -3305,10 +3013,10 @@ - - + + - + 96 384 1 @@ -3316,19 +3024,16 @@ - - - - - + + - + 1 384 32 32 - + 96 384 1 @@ -3344,8 +3049,8 @@ - - + + 1 @@ -3355,19 +3060,16 @@ - + - - - - + 1 96 32 32 - + 1 96 1 @@ -3375,7 +3077,7 @@ - + 1 96 32 @@ -3383,10 +3085,10 @@ - - + + - + 576 96 1 @@ -3394,19 +3096,16 @@ - - - - - + + - + 1 96 32 32 - + 576 96 1 @@ -3422,8 +3121,8 @@ - - + + 1 @@ -3433,19 +3132,16 @@ - + - - - - + 1 576 32 32 - + 1 576 1 @@ -3453,7 +3149,7 @@ - + 1 576 32 @@ -3462,12 +3158,9 @@ - - - - + - + 1 576 32 @@ -3475,7 +3168,7 @@ - + 1 576 32 @@ -3483,10 +3176,10 @@ - - + + - + 576 1 1 @@ -3495,19 +3188,16 @@ - - - - - + + - + 1 576 32 32 - + 576 1 1 @@ -3516,7 +3206,7 @@ - + 1 576 32 @@ -3524,8 +3214,8 @@ - - + + 1 @@ -3535,19 +3225,16 @@ - + - - - - + 1 576 32 32 - + 1 576 1 @@ -3555,7 +3242,7 @@ - + 1 576 32 @@ -3564,12 +3251,9 @@ - - - - + - + 1 576 32 @@ -3577,7 +3261,7 @@ - + 1 576 32 @@ -3585,10 +3269,10 @@ - - + + - + 96 576 1 @@ -3596,19 +3280,16 @@ - - - - - + + - + 1 576 32 32 - + 96 576 1 @@ -3624,8 +3305,8 @@ - - + + 1 @@ -3635,19 +3316,16 @@ - + - - - - + 1 96 32 32 - + 1 96 1 @@ -3655,7 +3333,7 @@ - + 1 96 32 @@ -3665,17 +3343,14 @@ - - - - + 1 96 32 32 - + 1 96 32 @@ -3683,7 +3358,7 @@ - + 1 96 32 @@ -3691,10 +3366,10 @@ - - + + - + 576 96 1 @@ -3702,19 +3377,16 @@ - - - - - + + - + 1 96 32 32 - + 576 96 1 @@ -3730,8 +3402,8 @@ - - + + 1 @@ -3741,19 +3413,16 @@ - + - - - - + 1 576 32 32 - + 1 576 1 @@ -3761,7 +3430,7 @@ - + 1 576 32 @@ -3770,12 +3439,9 @@ - - - - + - + 1 576 32 @@ -3783,7 +3449,7 @@ - + 1 576 32 @@ -3791,10 +3457,10 @@ - - + + - + 576 1 1 @@ -3803,19 +3469,16 @@ - - - - - + + - + 1 576 32 32 - + 576 1 1 @@ -3824,7 +3487,7 @@ - + 1 576 32 @@ -3832,8 +3495,8 @@ - - + + 1 @@ -3843,19 +3506,16 @@ - + - - - - + 1 576 32 32 - + 1 576 1 @@ -3863,7 +3523,7 @@ - + 1 576 32 @@ -3872,12 +3532,9 @@ - - - - + - + 1 576 32 @@ -3885,7 +3542,7 @@ - + 1 576 32 @@ -3893,10 +3550,10 @@ - - + + - + 96 576 1 @@ -3904,19 +3561,16 @@ - - - - - + + - + 1 576 32 32 - + 96 576 1 @@ -3932,8 +3586,8 @@ - - + + 1 @@ -3943,19 +3597,16 @@ - + - - - - + 1 96 32 32 - + 1 96 1 @@ -3963,7 +3614,7 @@ - + 1 96 32 @@ -3973,17 +3624,14 @@ - - - - + 1 96 32 32 - + 1 96 32 @@ -3991,7 +3639,7 @@ - + 1 96 32 @@ -3999,10 +3647,10 @@ - - + + - + 576 96 1 @@ -4010,19 +3658,16 @@ - - - - - + + - + 1 96 32 32 - + 576 96 1 @@ -4038,8 +3683,8 @@ - - + + 1 @@ -4049,19 +3694,16 @@ - + - - - - + 1 576 32 32 - + 1 576 1 @@ -4069,7 +3711,7 @@ - + 1 576 32 @@ -4078,12 +3720,9 @@ - - - - + - + 1 576 32 @@ -4091,7 +3730,7 @@ - + 1 576 32 @@ -4099,10 +3738,10 @@ - - + + - + 576 1 1 @@ -4111,19 +3750,16 @@ - - - - - + + - + 1 576 32 32 - + 576 1 1 @@ -4140,8 +3776,8 @@ - - + + 1 @@ -4151,19 +3787,16 @@ - + - - - - + 1 576 32 32 - + 1 576 1 @@ -4171,7 +3804,7 @@ - + 1 576 32 @@ -4180,12 +3813,9 @@ - - - - + - + 1 576 32 @@ -4193,7 +3823,7 @@ - + 1 576 32 @@ -4201,13 +3831,10 @@ - - - - - + + - + 16 576 1 @@ -4215,19 +3842,16 @@ - - - - - + + - + 1 576 32 32 - + 16 576 1 @@ -4243,8 +3867,8 @@ - - + + 1 @@ -4256,17 +3880,14 @@ - - - - + 1 16 32 32 - + 1 16 1 @@ -4274,7 +3895,7 @@ - + 1 16 32 @@ -4282,11 +3903,8 @@ - - - - - + + 4 @@ -4294,22 +3912,19 @@ - - - - + 1 16 32 32 - + 4 - + 1 32 32 @@ -4319,11 +3934,8 @@ - - - - + 1 16 32 @@ -4331,105 +3943,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 32 32 16 - + 2 - + 1 16384 - - + + - + 576 1 1 @@ -4438,19 +4049,16 @@ - - - - - + + - + 1 576 32 32 - + 576 1 1 @@ -4459,7 +4067,7 @@ - + 1 576 16 @@ -4467,8 +4075,8 @@ - - + + 1 @@ -4478,19 +4086,16 @@ - + - - - - + 1 576 16 16 - + 1 576 1 @@ -4498,7 +4103,7 @@ - + 1 576 16 @@ -4506,13 +4111,10 @@ - - - - - + + - + 1 576 16 @@ -4520,7 +4122,7 @@ - + 1 576 16 @@ -4528,10 +4130,10 @@ - - + + - + 160 576 1 @@ -4539,19 +4141,16 @@ - - - - - + + - + 1 576 16 16 - + 160 576 1 @@ -4567,8 +4166,8 @@ - - + + 1 @@ -4578,19 +4177,16 @@ - + - - - - + 1 160 16 16 - + 1 160 1 @@ -4598,7 +4194,7 @@ - + 1 160 16 @@ -4606,10 +4202,10 @@ - - + + - + 960 160 1 @@ -4617,19 +4213,16 @@ - - - - - + + - + 1 160 16 16 - + 960 160 1 @@ -4645,8 +4238,8 @@ - - + + 1 @@ -4656,19 +4249,16 @@ - + - - - - + 1 960 16 16 - + 1 960 1 @@ -4676,7 +4266,7 @@ - + 1 960 16 @@ -4684,13 +4274,10 @@ - - - - - + + - + 1 960 16 @@ -4698,7 +4285,7 @@ - + 1 960 16 @@ -4706,10 +4293,10 @@ - - + + - + 960 1 1 @@ -4718,19 +4305,16 @@ - - - - - + + - + 1 960 16 16 - + 960 1 1 @@ -4739,7 +4323,7 @@ - + 1 960 16 @@ -4747,8 +4331,8 @@ - - + + 1 @@ -4758,19 +4342,16 @@ - + - - - - + 1 960 16 16 - + 1 960 1 @@ -4778,7 +4359,7 @@ - + 1 960 16 @@ -4786,13 +4367,10 @@ - - - - - + + - + 1 960 16 @@ -4800,7 +4378,7 @@ - + 1 960 16 @@ -4808,10 +4386,10 @@ - - + + - + 160 960 1 @@ -4819,19 +4397,16 @@ - - - - - + + - + 1 960 16 16 - + 160 960 1 @@ -4847,8 +4422,8 @@ - - + + 1 @@ -4858,19 +4433,16 @@ - + - - - - + 1 160 16 16 - + 1 160 1 @@ -4878,7 +4450,7 @@ - + 1 160 16 @@ -4886,19 +4458,16 @@ - + - - - - + 1 160 16 16 - + 1 160 16 @@ -4906,7 +4475,7 @@ - + 1 160 16 @@ -4914,10 +4483,10 @@ - - + + - + 960 160 1 @@ -4925,19 +4494,16 @@ - - - - - + + - + 1 160 16 16 - + 960 160 1 @@ -4953,8 +4519,8 @@ - - + + 1 @@ -4964,19 +4530,16 @@ - + - - - - + 1 960 16 16 - + 1 960 1 @@ -4984,7 +4547,7 @@ - + 1 960 16 @@ -4992,13 +4555,10 @@ - - - - - + + - + 1 960 16 @@ -5006,7 +4566,7 @@ - + 1 960 16 @@ -5014,10 +4574,10 @@ - - + + - + 960 1 1 @@ -5026,19 +4586,16 @@ - - - - - + + - + 1 960 16 16 - + 960 1 1 @@ -5047,7 +4604,7 @@ - + 1 960 16 @@ -5055,8 +4612,8 @@ - - + + 1 @@ -5066,19 +4623,16 @@ - + - - - - + 1 960 16 16 - + 1 960 1 @@ -5086,7 +4640,7 @@ - + 1 960 16 @@ -5094,13 +4648,10 @@ - - - - - + + - + 1 960 16 @@ -5108,7 +4659,7 @@ - + 1 960 16 @@ -5116,10 +4667,10 @@ - - + + - + 160 960 1 @@ -5127,19 +4678,16 @@ - - - - - + + - + 1 960 16 16 - + 160 960 1 @@ -5155,8 +4703,8 @@ - - + + 1 @@ -5166,19 +4714,16 @@ - + - - - - + 1 160 16 16 - + 1 160 1 @@ -5186,7 +4731,7 @@ - + 1 160 16 @@ -5194,19 +4739,16 @@ - + - - - - + 1 160 16 16 - + 1 160 16 @@ -5214,7 +4756,7 @@ - + 1 160 16 @@ -5222,10 +4764,10 @@ - - + + - + 960 160 1 @@ -5233,19 +4775,16 @@ - - - - - + + - + 1 160 16 16 - + 960 160 1 @@ -5261,8 +4800,8 @@ - - + + 1 @@ -5272,19 +4811,16 @@ - + - - - - + 1 960 16 16 - + 1 960 1 @@ -5292,7 +4828,7 @@ - + 1 960 16 @@ -5300,13 +4836,10 @@ - - - - - + + - + 1 960 16 @@ -5314,7 +4847,7 @@ - + 1 960 16 @@ -5322,10 +4855,10 @@ - - + + - + 960 1 1 @@ -5334,19 +4867,16 @@ - - - - - + + - + 1 960 16 16 - + 960 1 1 @@ -5355,7 +4885,7 @@ - + 1 960 16 @@ -5363,8 +4893,8 @@ - - + + 1 @@ -5374,19 +4904,16 @@ - + - - - - + 1 960 16 16 - + 1 960 1 @@ -5394,7 +4921,7 @@ - + 1 960 16 @@ -5402,13 +4929,10 @@ - - - - - + + - + 1 960 16 @@ -5416,7 +4940,7 @@ - + 1 960 16 @@ -5424,10 +4948,10 @@ - - + + - + 320 960 1 @@ -5435,19 +4959,16 @@ - - - - - + + - + 1 960 16 16 - + 320 960 1 @@ -5463,8 +4984,8 @@ - - + + 1 @@ -5474,19 +4995,16 @@ - + - - - - + 1 320 16 16 - + 1 320 1 @@ -5494,7 +5012,7 @@ - + 1 320 16 @@ -5502,10 +5020,10 @@ - - + + - + 1280 320 1 @@ -5513,19 +5031,16 @@ - - - - - + + - + 1 320 16 16 - + 1280 320 1 @@ -5541,8 +5056,8 @@ - - + + 1 @@ -5552,19 +5067,16 @@ - + - - - - + 1 1280 16 16 - + 1 1280 1 @@ -5572,7 +5084,7 @@ - + 1 1280 16 @@ -5580,13 +5092,10 @@ - - - - - + + - + 1 1280 16 @@ -5594,7 +5103,7 @@ - + 1 1280 16 @@ -5602,10 +5111,10 @@ - - + + - + 1280 1 1 @@ -5614,19 +5123,16 @@ - - - - - + + - + 1 1280 16 16 - + 1280 1 1 @@ -5643,8 +5149,8 @@ - - + + 1 @@ -5654,19 +5160,16 @@ - + - - - - + 1 1280 16 16 - + 1 1280 1 @@ -5674,7 +5177,7 @@ - + 1 1280 16 @@ -5682,13 +5185,10 @@ - - - - - + + - + 1 1280 16 @@ -5696,7 +5196,7 @@ - + 1 1280 16 @@ -5704,13 +5204,10 @@ - - - - - + + - + 24 1280 1 @@ -5718,19 +5215,16 @@ - - - - - + + - + 1 1280 16 16 - + 24 1280 1 @@ -5746,8 +5240,8 @@ - - + + 1 @@ -5757,19 +5251,16 @@ - + - - - - + 1 24 16 16 - + 1 24 1 @@ -5777,7 +5268,7 @@ - + 1 24 16 @@ -5785,34 +5276,28 @@ - - - - - + + 4 - - - - + - + 1 24 16 16 - + 4 - + 1 16 16 @@ -5820,13 +5305,10 @@ - + - - - - + 1 24 16 @@ -5834,105 +5316,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 16 16 24 - + 2 - + 1 6144 - - + + - + 256 1280 1 @@ -5940,19 +5421,16 @@ - - - - - + + - + 1 1280 16 16 - + 256 1280 1 @@ -5968,8 +5446,8 @@ - - + + 1 @@ -5979,19 +5457,16 @@ - + - - - - + 1 256 16 16 - + 1 256 1 @@ -5999,7 +5474,7 @@ - + 1 256 16 @@ -6007,13 +5482,10 @@ - - - - - + + - + 1 256 16 @@ -6021,7 +5493,7 @@ - + 1 256 16 @@ -6029,10 +5501,10 @@ - - + + - + 256 1 1 @@ -6041,19 +5513,16 @@ - - - - - + + - + 1 256 16 16 - + 256 1 1 @@ -6062,7 +5531,7 @@ - + 1 256 8 @@ -6070,8 +5539,8 @@ - - + + 1 @@ -6081,19 +5550,16 @@ - + - - - - + 1 256 8 8 - + 1 256 1 @@ -6101,7 +5567,7 @@ - + 1 256 8 @@ -6109,13 +5575,10 @@ - - - - - + + - + 1 256 8 @@ -6123,7 +5586,7 @@ - + 1 256 8 @@ -6131,10 +5594,10 @@ - - + + - + 512 256 1 @@ -6142,19 +5605,16 @@ - - - - - + + - + 1 256 8 8 - + 512 256 1 @@ -6170,8 +5630,8 @@ - - + + 1 @@ -6181,19 +5641,16 @@ - + - - - - + 1 512 8 8 - + 1 512 1 @@ -6201,7 +5658,7 @@ - + 1 512 8 @@ -6209,13 +5666,10 @@ - - - - - + + - + 1 512 8 @@ -6223,7 +5677,7 @@ - + 1 512 8 @@ -6231,10 +5685,10 @@ - - + + - + 512 1 1 @@ -6243,19 +5697,16 @@ - - - - - + + - + 1 512 8 8 - + 512 1 1 @@ -6272,8 +5723,8 @@ - - + + 1 @@ -6283,19 +5734,16 @@ - + - - - - + 1 512 8 8 - + 1 512 1 @@ -6303,7 +5751,7 @@ - + 1 512 8 @@ -6311,13 +5759,10 @@ - - - - - + + - + 1 512 8 @@ -6325,7 +5770,7 @@ - + 1 512 8 @@ -6333,13 +5778,10 @@ - - - - - + + - + 24 512 1 @@ -6347,19 +5789,16 @@ - - - - - + + - + 1 512 8 8 - + 24 512 1 @@ -6375,8 +5814,8 @@ - - + + 1 @@ -6386,19 +5825,16 @@ - + - - - - + 1 24 8 8 - + 1 24 1 @@ -6406,7 +5842,7 @@ - + 1 24 8 @@ -6414,34 +5850,28 @@ - - - - - + + 4 - - - - + - + 1 24 8 8 - + 4 - + 1 8 8 @@ -6449,13 +5879,10 @@ - + - - - - + 1 24 8 @@ -6463,105 +5890,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 8 8 24 - + 2 - + 1 1536 - - + + - + 128 512 1 @@ -6569,19 +5995,16 @@ - - - - - + + - + 1 512 8 8 - + 128 512 1 @@ -6597,8 +6020,8 @@ - - + + 1 @@ -6608,19 +6031,16 @@ - + - - - - + 1 128 8 8 - + 1 128 1 @@ -6628,7 +6048,7 @@ - + 1 128 8 @@ -6636,13 +6056,10 @@ - - - - - + + - + 1 128 8 @@ -6650,7 +6067,7 @@ - + 1 128 8 @@ -6658,10 +6075,10 @@ - - + + - + 128 1 1 @@ -6670,19 +6087,16 @@ - - - - - + + - + 1 128 8 8 - + 128 1 1 @@ -6691,7 +6105,7 @@ - + 1 128 4 @@ -6699,8 +6113,8 @@ - - + + 1 @@ -6710,19 +6124,16 @@ - + - - - - + 1 128 4 4 - + 1 128 1 @@ -6730,7 +6141,7 @@ - + 1 128 4 @@ -6738,13 +6149,10 @@ - - - - - + + - + 1 128 4 @@ -6752,7 +6160,7 @@ - + 1 128 4 @@ -6760,10 +6168,10 @@ - - + + - + 256 128 1 @@ -6771,19 +6179,16 @@ - - - - - + + - + 1 128 4 4 - + 256 128 1 @@ -6799,8 +6204,8 @@ - - + + 1 @@ -6810,19 +6215,16 @@ - + - - - - + 1 256 4 4 - + 1 256 1 @@ -6830,7 +6232,7 @@ - + 1 256 4 @@ -6838,13 +6240,10 @@ - - - - - + + - + 1 256 4 @@ -6852,7 +6251,7 @@ - + 1 256 4 @@ -6860,10 +6259,10 @@ - - + + - + 256 1 1 @@ -6872,19 +6271,16 @@ - - - - - + + - + 1 256 4 4 - + 256 1 1 @@ -6901,8 +6297,8 @@ - - + + 1 @@ -6912,19 +6308,16 @@ - + - - - - + 1 256 4 4 - + 1 256 1 @@ -6932,7 +6325,7 @@ - + 1 256 4 @@ -6940,13 +6333,10 @@ - - - - - + + - + 1 256 4 @@ -6954,7 +6344,7 @@ - + 1 256 4 @@ -6962,13 +6352,10 @@ - - - - - + + - + 24 256 1 @@ -6976,19 +6363,16 @@ - - - - - + + - + 1 256 4 4 - + 24 256 1 @@ -7004,8 +6388,8 @@ - - + + 1 @@ -7015,19 +6399,16 @@ - + - - - - + 1 24 4 4 - + 1 24 1 @@ -7035,7 +6416,7 @@ - + 1 24 4 @@ -7043,34 +6424,28 @@ - - - - - + + 4 - - - - + - + 1 24 4 4 - + 4 - + 1 4 4 @@ -7078,13 +6453,10 @@ - + - - - - + 1 24 4 @@ -7092,105 +6464,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 4 4 24 - + 2 - + 1 384 - - + + - + 128 256 1 @@ -7198,19 +6569,16 @@ - - - - - + + - + 1 256 4 4 - + 128 256 1 @@ -7226,8 +6594,8 @@ - - + + 1 @@ -7237,19 +6605,16 @@ - + - - - - + 1 128 4 4 - + 1 128 1 @@ -7257,7 +6622,7 @@ - + 1 128 4 @@ -7265,13 +6630,10 @@ - - - - - + + - + 1 128 4 @@ -7279,7 +6641,7 @@ - + 1 128 4 @@ -7287,10 +6649,10 @@ - - + + - + 128 1 1 @@ -7299,19 +6661,16 @@ - - - - - + + - + 1 128 4 4 - + 128 1 1 @@ -7320,7 +6679,7 @@ - + 1 128 2 @@ -7328,8 +6687,8 @@ - - + + 1 @@ -7339,19 +6698,16 @@ - + - - - - + 1 128 2 2 - + 1 128 1 @@ -7359,7 +6715,7 @@ - + 1 128 2 @@ -7367,13 +6723,10 @@ - - - - - + + - + 1 128 2 @@ -7381,7 +6734,7 @@ - + 1 128 2 @@ -7389,10 +6742,10 @@ - - + + - + 256 128 1 @@ -7400,19 +6753,16 @@ - - - - - + + - + 1 128 2 2 - + 256 128 1 @@ -7428,8 +6778,8 @@ - - + + 1 @@ -7439,19 +6789,16 @@ - + - - - - + 1 256 2 2 - + 1 256 1 @@ -7459,7 +6806,7 @@ - + 1 256 2 @@ -7467,13 +6814,10 @@ - - - - - + + - + 1 256 2 @@ -7481,7 +6825,7 @@ - + 1 256 2 @@ -7489,10 +6833,10 @@ - - + + - + 256 1 1 @@ -7501,19 +6845,16 @@ - - - - - + + - + 1 256 2 2 - + 256 1 1 @@ -7530,8 +6871,8 @@ - - + + 1 @@ -7541,19 +6882,16 @@ - + - - - - + 1 256 2 2 - + 1 256 1 @@ -7561,7 +6899,7 @@ - + 1 256 2 @@ -7569,13 +6907,10 @@ - - - - - + + - + 1 256 2 @@ -7583,7 +6918,7 @@ - + 1 256 2 @@ -7591,13 +6926,10 @@ - - - - - + + - + 16 256 1 @@ -7605,19 +6937,16 @@ - - - - - + + - + 1 256 2 2 - + 16 256 1 @@ -7633,8 +6962,8 @@ - - + + 1 @@ -7644,19 +6973,16 @@ - + - - - - + 1 16 2 2 - + 1 16 1 @@ -7664,7 +6990,7 @@ - + 1 16 2 @@ -7672,34 +6998,28 @@ - - - - - + + 4 - - - - + - + 1 16 2 2 - + 4 - + 1 2 2 @@ -7707,13 +7027,10 @@ - + - - - - + 1 16 2 @@ -7721,105 +7038,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 2 2 16 - + 2 - + 1 64 - - + + - + 64 256 1 @@ -7827,19 +7143,16 @@ - - - - - + + - + 1 256 2 2 - + 64 256 1 @@ -7855,8 +7168,8 @@ - - + + 1 @@ -7866,19 +7179,16 @@ - + - - - - + 1 64 2 2 - + 1 64 1 @@ -7886,7 +7196,7 @@ - + 1 64 2 @@ -7894,13 +7204,10 @@ - - - - - + + - + 1 64 2 @@ -7908,7 +7215,7 @@ - + 1 64 2 @@ -7916,10 +7223,10 @@ - - + + - + 64 1 1 @@ -7928,19 +7235,16 @@ - - - - - + + - + 1 64 2 2 - + 64 1 1 @@ -7949,7 +7253,7 @@ - + 1 64 1 @@ -7957,8 +7261,8 @@ - - + + 1 @@ -7968,19 +7272,16 @@ - + - - - - + 1 64 1 1 - + 1 64 1 @@ -7988,7 +7289,7 @@ - + 1 64 1 @@ -7996,13 +7297,10 @@ - - - - - + + - + 1 64 1 @@ -8010,7 +7308,7 @@ - + 1 64 1 @@ -8018,10 +7316,10 @@ - - + + - + 128 64 1 @@ -8029,19 +7327,16 @@ - - - - - + + - + 1 64 1 1 - + 128 64 1 @@ -8057,8 +7352,8 @@ - - + + 1 @@ -8068,19 +7363,16 @@ - + - - - - + 1 128 1 1 - + 1 128 1 @@ -8088,7 +7380,7 @@ - + 1 128 1 @@ -8096,13 +7388,10 @@ - - - - - + + - + 1 128 1 @@ -8110,7 +7399,7 @@ - + 1 128 1 @@ -8118,10 +7407,10 @@ - - + + - + 128 1 1 @@ -8130,19 +7419,16 @@ - - - - - + + - + 1 128 1 1 - + 128 1 1 @@ -8159,8 +7445,8 @@ - - + + 1 @@ -8170,19 +7456,16 @@ - + - - - - + 1 128 1 1 - + 1 128 1 @@ -8190,7 +7473,7 @@ - + 1 128 1 @@ -8198,13 +7481,10 @@ - - - - - + + - + 1 128 1 @@ -8212,7 +7492,7 @@ - + 1 128 1 @@ -8220,13 +7500,10 @@ - - - - - + + - + 16 128 1 @@ -8234,19 +7511,16 @@ - - - - - + + - + 1 128 1 1 - + 16 128 1 @@ -8262,8 +7536,8 @@ - - + + 1 @@ -8273,19 +7547,16 @@ - + - - - - + 1 16 1 1 - + 1 16 1 @@ -8293,7 +7564,7 @@ - + 1 16 1 @@ -8301,34 +7572,28 @@ - - - - - + + 4 - - - - + - + 1 16 1 1 - + 4 - + 1 1 1 @@ -8336,13 +7601,10 @@ - + - - - - + 1 16 1 @@ -8350,143 +7612,139 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 1 1 16 - + 2 - + 1 16 - + - - - - + 1 16384 - + 1 6144 - + 1 1536 - + 1 384 - + 1 64 - + 1 16 - + 1 24528 - - + + - + 576 1 1 @@ -8495,19 +7753,16 @@ - - - - - + + - + 1 576 32 32 - + 576 1 1 @@ -8524,8 +7779,8 @@ - - + + 1 @@ -8535,19 +7790,16 @@ - + - - - - + 1 576 32 32 - + 1 576 1 @@ -8555,7 +7807,7 @@ - + 1 576 32 @@ -8563,13 +7815,10 @@ - - - - - + + - + 1 576 32 @@ -8577,7 +7826,7 @@ - + 1 576 32 @@ -8585,13 +7834,10 @@ - - - - - + + - + 56 576 1 @@ -8599,19 +7845,16 @@ - - - - - + + - + 1 576 32 32 - + 56 576 1 @@ -8627,8 +7870,8 @@ - - + + 1 @@ -8638,19 +7881,16 @@ - + - - - - + 1 56 32 32 - + 1 56 1 @@ -8658,7 +7898,7 @@ - + 1 56 32 @@ -8666,34 +7906,28 @@ - - - - - + + 4 - - - - + - + 1 56 32 32 - + 4 - + 1 32 32 @@ -8701,13 +7935,10 @@ - + - - - - + 1 56 32 @@ -8715,105 +7946,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 32 32 56 - + 2 - + 1 57344 - - + + - + 1280 1 1 @@ -8822,19 +8052,16 @@ - - - - - + + - + 1 1280 16 16 - + 1280 1 1 @@ -8851,8 +8078,8 @@ - - + + 1 @@ -8862,19 +8089,16 @@ - + - - - - + 1 1280 16 16 - + 1 1280 1 @@ -8882,7 +8106,7 @@ - + 1 1280 16 @@ -8890,13 +8114,10 @@ - - - - - + + - + 1 1280 16 @@ -8904,7 +8125,7 @@ - + 1 1280 16 @@ -8912,13 +8133,10 @@ - - - - - + + - + 84 1280 1 @@ -8926,19 +8144,16 @@ - - - - - + + - + 1 1280 16 16 - + 84 1280 1 @@ -8954,8 +8169,8 @@ - - + + 1 @@ -8965,19 +8180,16 @@ - + - - - - + 1 84 16 16 - + 1 84 1 @@ -8985,7 +8197,7 @@ - + 1 84 16 @@ -8993,34 +8205,28 @@ - - - - - + + 4 - - - - + - + 1 84 16 16 - + 4 - + 1 16 16 @@ -9028,13 +8234,10 @@ - + - - - - + 1 84 16 @@ -9042,105 +8245,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 16 16 84 - + 2 - + 1 21504 - - + + - + 512 1 1 @@ -9149,19 +8351,16 @@ - - - - - + + - + 1 512 8 8 - + 512 1 1 @@ -9178,8 +8377,8 @@ - - + + 1 @@ -9189,19 +8388,16 @@ - + - - - - + 1 512 8 8 - + 1 512 1 @@ -9209,7 +8405,7 @@ - + 1 512 8 @@ -9217,13 +8413,10 @@ - - - - - + + - + 1 512 8 @@ -9231,7 +8424,7 @@ - + 1 512 8 @@ -9239,13 +8432,10 @@ - - - - - + + - + 84 512 1 @@ -9253,19 +8443,16 @@ - - - - - + + - + 1 512 8 8 - + 84 512 1 @@ -9281,8 +8468,8 @@ - - + + 1 @@ -9292,19 +8479,16 @@ - + - - - - + 1 84 8 8 - + 1 84 1 @@ -9312,7 +8496,7 @@ - + 1 84 8 @@ -9320,34 +8504,28 @@ - - - - - + + 4 - - - - + - + 1 84 8 8 - + 4 - + 1 8 8 @@ -9355,13 +8533,10 @@ - + - - - - + 1 84 8 @@ -9369,105 +8544,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 8 8 84 - + 2 - + 1 5376 - - + + - + 256 1 1 @@ -9476,19 +8650,16 @@ - - - - - + + - + 1 256 4 4 - + 256 1 1 @@ -9505,8 +8676,8 @@ - - + + 1 @@ -9516,19 +8687,16 @@ - + - - - - + 1 256 4 4 - + 1 256 1 @@ -9536,7 +8704,7 @@ - + 1 256 4 @@ -9544,13 +8712,10 @@ - - - - - + + - + 1 256 4 @@ -9558,7 +8723,7 @@ - + 1 256 4 @@ -9566,13 +8731,10 @@ - - - - - + + - + 84 256 1 @@ -9580,19 +8742,16 @@ - - - - - + + - + 1 256 4 4 - + 84 256 1 @@ -9608,8 +8767,8 @@ - - + + 1 @@ -9619,19 +8778,16 @@ - + - - - - + 1 84 4 4 - + 1 84 1 @@ -9639,7 +8795,7 @@ - + 1 84 4 @@ -9647,34 +8803,28 @@ - - - - - + + 4 - - - - + - + 1 84 4 4 - + 4 - + 1 4 4 @@ -9682,13 +8832,10 @@ - + - - - - + 1 84 4 @@ -9696,105 +8843,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 4 4 84 - + 2 - + 1 1344 - - + + - + 256 1 1 @@ -9803,19 +8949,16 @@ - - - - - + + - + 1 256 2 2 - + 256 1 1 @@ -9832,8 +8975,8 @@ - - + + 1 @@ -9843,19 +8986,16 @@ - + - - - - + 1 256 2 2 - + 1 256 1 @@ -9863,7 +9003,7 @@ - + 1 256 2 @@ -9871,13 +9011,10 @@ - - - - - + + - + 1 256 2 @@ -9885,7 +9022,7 @@ - + 1 256 2 @@ -9893,13 +9030,10 @@ - - - - - + + - + 56 256 1 @@ -9907,19 +9041,16 @@ - - - - - + + - + 1 256 2 2 - + 56 256 1 @@ -9935,8 +9066,8 @@ - - + + 1 @@ -9946,19 +9077,16 @@ - + - - - - + 1 56 2 2 - + 1 56 1 @@ -9966,7 +9094,7 @@ - + 1 56 2 @@ -9974,34 +9102,28 @@ - - - - - + + 4 - - - - + - + 1 56 2 2 - + 4 - + 1 2 2 @@ -10009,13 +9131,10 @@ - + - - - - + 1 56 2 @@ -10023,105 +9142,104 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - - 1 - - + + - - 1 + + + + + + + + 1 - - + + + + + 1 + + - + 1 - + + + + + 1 + + + + - - - - + 1 - + 1 - + 2 - + - - - - + 1 2 2 56 - + 2 - + 1 224 - - + + - + 128 1 1 @@ -10130,19 +9248,16 @@ - - - - - + + - + 1 128 1 1 - + 128 1 1 @@ -10159,8 +9274,8 @@ - - + + 1 @@ -10170,19 +9285,16 @@ - + - - - - + 1 128 1 1 - + 1 128 1 @@ -10190,7 +9302,7 @@ - + 1 128 1 @@ -10198,13 +9310,10 @@ - - - - - + + - + 1 128 1 @@ -10212,7 +9321,7 @@ - + 1 128 1 @@ -10220,13 +9329,10 @@ - - - - - + + - + 56 128 1 @@ -10234,19 +9340,16 @@ - - - - - + + - + 1 128 1 1 - + 56 128 1 @@ -10262,8 +9365,8 @@ - - + + 1 @@ -10273,19 +9376,16 @@ - + - - - - + 1 56 1 1 - + 1 56 1 @@ -10293,7 +9393,7 @@ - + 1 56 1 @@ -10301,34 +9401,28 @@ - - - - - + + 4 - - - - + - + 1 56 1 1 - + 4 - + 1 1 1 @@ -10336,13 +9430,10 @@ - + - - - - + 1 56 1 @@ -10350,178 +9441,252 @@ - + 4 - - - - - + + - - 1 - + - - - - - + + - - - - - + - + 4 - + + + + + + + + + + + + 1 + + + + + + + 1 - - + 1 - - + + - + 1 - + - - - - + 1 - + 1 - + 2 - + - - - - + 1 1 1 56 - + 2 - + 1 56 - + - - - - + 1 57344 - + 1 21504 - + 1 5376 - + 1 1344 - + 1 224 - + 1 56 - + 1 85848 - - - - - + + + + + 1 + 85848 + + + + + 2 + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + 1 + + + + + + + + 1 + + + + + 1 + + + + + + + + 1 + + + + + + + + 1 + + + + + + + + 1 + + + 1 + + + 1 + + + + 3 - + - - - - + 1 85848 - + 3 - + 1 6132 14 - - - - + + - + 1 6132 14 @@ -10533,83 +9698,53 @@ - - - - - - - - 1 - - - - - - - - + + - - 1 + + 2 - - - - - + + - - 1 - + - - - - - + - + 3 - - 1 - - - 1 - - - 1 + + 2 + - + 2 - - - - - + + - + + 1 + - + - - - - + 2 - + + 1 + @@ -10617,27 +9752,21 @@ - - - - - + + 1 - + - - - - + 1 - + 1 @@ -10647,18 +9776,15 @@ - + - - - - + 1 6132 14 - + 2 @@ -10669,13 +9795,10 @@ - + - - - - + 6132 14 @@ -10687,68 +9810,147 @@ - - - - - + + - + + 1 6132 14 + + 3 + + + + + + + 6132 + 14 + + + 3 + - + 1 6132 14 - - - - - + + + + + 1 + 6132 + 14 + + + + + 3 + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + 1 + + + + + + + + 1 + + + + + 1 + + + + + + + + 1 + + + + + + + + 1 + + + 1 + + + + 2 - + - - - - + 1 6132 14 - + 2 - + 1 85848 - + - - - - + 1 576 32 @@ -10761,55 +9963,43 @@ - - - - - + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -10819,13 +10009,10 @@ - + - - - - + 1 3 512 @@ -10838,55 +10025,43 @@ - - - - - + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -10896,16 +10071,13 @@ - - - - - + + - + 2 - + 2 @@ -10916,45 +10088,36 @@ - - - - - + + 1 - - - - + - + 2 16384 - + 1 - + 1 2 16384 - + - - - - + 1 1280 16 @@ -10967,55 +10130,43 @@ - - - - - + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11025,55 +10176,59 @@ - - - - - + + + + + 1 + 3 + 512 + 512 + + + + + 4 + + + + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11083,16 +10238,13 @@ - - - - - + + - + 2 - + 2 @@ -11103,45 +10255,36 @@ - - - - - + + 1 - - - - + - + 2 6144 - + 1 - + 1 2 6144 - + - - - - + 1 512 8 @@ -11154,55 +10297,43 @@ - - - - - + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11212,55 +10343,59 @@ - - - - - + + + + + 1 + 3 + 512 + 512 + + + + + 4 + + + + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11270,16 +10405,13 @@ - - - - - + + - + 2 - + 2 @@ -11290,45 +10422,36 @@ - - - - - + + 1 - - - - + - + 2 1536 - + 1 - + 1 2 1536 - + - - - - + 1 256 4 @@ -11341,55 +10464,43 @@ - - - - - + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11399,55 +10510,59 @@ - - - - - + + + + + 1 + 3 + 512 + 512 + + + + + 4 + + + + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11457,16 +10572,13 @@ - - - - - + + - + 2 - + 2 @@ -11477,45 +10589,36 @@ - - - - - + + 1 - - - - + - + 2 384 - + 1 - + 1 2 384 - + - - - - + 1 256 2 @@ -11528,55 +10631,43 @@ - - - - - + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11586,55 +10677,59 @@ - - - - - + + + + + 1 + 3 + 512 + 512 + + + + + 4 + + + + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11644,16 +10739,13 @@ - - - - - + + - + 2 - + 2 @@ -11664,45 +10756,36 @@ - - - - - + + 1 - - - - + - + 2 64 - + 1 - + 1 2 64 - + - - - - + 1 128 1 @@ -11715,55 +10798,43 @@ - - - - - + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11773,55 +10844,59 @@ - - - - - + + + + + 1 + 3 + 512 + 512 + + + + + 4 + + + + + 1 - - - - - + + 1 - - - - - + + 1 - - - - - + + - + 4 - + 1 - + 1 - + 1 @@ -11831,16 +10906,13 @@ - - - - - + + - + 2 - + 2 @@ -11851,105 +10923,93 @@ - - - - - + + 1 - - - - + - + 2 16 - + 1 - + 1 2 16 - + - - - - + 1 2 16384 - + 1 2 6144 - + 1 2 1536 - + 1 2 384 - + 1 2 64 - + 1 2 16 - + 1 2 24528 - - - - - + + - + 1 24528 - + 1 85848 - + 1 2 24528 - + 1 1 200 @@ -11957,12 +11017,9 @@ - - - - + - + 1 1 200 @@ -11974,7 +11031,6 @@ - @@ -12007,7 +11063,6 @@ - @@ -12022,6 +11077,7 @@ + @@ -12038,7 +11094,6 @@ - @@ -12052,8 +11107,8 @@ + - @@ -12068,6 +11123,7 @@ + @@ -12084,7 +11140,6 @@ - @@ -12098,8 +11153,8 @@ + - @@ -12114,9 +11169,9 @@ + - @@ -12130,6 +11185,7 @@ + @@ -12146,7 +11202,6 @@ - @@ -12160,9 +11215,9 @@ + - @@ -12176,16 +11231,14 @@ + - - - @@ -12195,225 +11248,211 @@ - - + - - - - + + + + + - - - - + + + + - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - + + + + + - - - - - - - + + + + - - - - + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + + - - @@ -12423,94 +11462,98 @@ - - - - - - - - + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - + @@ -12520,142 +11563,199 @@ - - + - - - - + + + + + - - - - + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + - @@ -12674,9 +11774,6 @@ - - - @@ -12684,7 +11781,7 @@ - + @@ -12692,13 +11789,8 @@ - - - - - diff --git a/mkdocs.yml b/mkdocs.yml index e489334..9f00e4c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,9 +13,9 @@ nav: - './phases/phase3.md' - Additional Documentation: - Automated Checkout Services: - - './automated-checkout-services/device_services.md' - - './automated-checkout-services/application_services.md' - - './automated-checkout-services/micro_services.md' + - './automated-vending-services/device_services.md' + - './automated-vending-services/application_services.md' + - './automated-vending-services/micro_services.md' - 'events.md' - 'configuration.md' - 'modifying_source_code.md' diff --git a/ms-authentication/.golangci.yml b/ms-authentication/.golangci.yml index 61af441..efc6e80 100644 --- a/ms-authentication/.golangci.yml +++ b/ms-authentication/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: diff --git a/ms-authentication/Dockerfile b/ms-authentication/Dockerfile index f06e9dd..4ee7b28 100644 --- a/ms-authentication/Dockerfile +++ b/ms-authentication/Dockerfile @@ -1,13 +1,14 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -FROM golang:1.18-alpine3.16 AS builder +FROM golang:1.20-alpine3.17 AS builder LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' # add git for go modules -RUN apk update && apk add --no-cache make git gcc libc-dev zeromq-dev linux-headers +# hadolint ignore=DL3018 +RUN apk update && apk add --no-cache make git linux-headers ENV GO111MODULE=on WORKDIR /usr/local/bin/ @@ -24,13 +25,12 @@ COPY . . RUN make gobuild-authentication # Next image - Copy built Go binary into new workspace -FROM alpine +FROM alpine:3.17 LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' -RUN apk --no-cache add zeromq -COPY --from=builder /usr/local/bin/ms-authentication/res/configuration.toml /res/configuration.toml +COPY --from=builder /usr/local/bin/ms-authentication/res/configuration.yaml /res/configuration.yaml COPY --from=builder /usr/local/bin/ms-authentication/main /ms-authentication COPY --from=builder /usr/local/bin/ms-authentication/cards.json /cards.json COPY --from=builder /usr/local/bin/ms-authentication/accounts.json /accounts.json diff --git a/ms-authentication/LICENSE b/ms-authentication/LICENSE index 7bad583..4f84e34 100644 --- a/ms-authentication/LICENSE +++ b/ms-authentication/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/ms-authentication/Makefile b/ms-authentication/Makefile index c1b2351..5570083 100644 --- a/ms-authentication/Makefile +++ b/ms-authentication/Makefile @@ -1,9 +1,9 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build gobuild run gorun stop test lint -MICROSERVICE=automated-checkout/ms-authentication +MICROSERVICE=automated-vending/ms-authentication ARCH=$(shell uname -m) @@ -19,7 +19,7 @@ docker: . gobuild-authentication: tidy - CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a -installsuffix cgo main.go + CGO_ENABLED=0 GOOS=linux go build -ldflags='-s -w' -a main.go run: docker run \ diff --git a/ms-authentication/go.mod b/ms-authentication/go.mod index 4bb5234..b66d632 100644 --- a/ms-authentication/go.mod +++ b/ms-authentication/go.mod @@ -1,74 +1,80 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module ms-authentication -go 1.18 +go 1.20 require ( - github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 - github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 + github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 github.com/gorilla/mux v1.8.0 - github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.4 ) require ( - bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 // indirect - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/armon/go-metrics v0.4.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 // indirect - github.com/fatih/color v1.9.0 // indirect - github.com/fxamacker/cbor/v2 v2.4.0 // indirect - github.com/go-kit/log v0.2.0 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect - github.com/go-redis/redis/v7 v7.3.0 // indirect - github.com/golang/protobuf v1.5.2 // indirect - github.com/gomodule/redigo v1.8.8 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/consul/api v1.9.1 // indirect - github.com/hashicorp/errwrap v1.0.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v0.12.0 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/diegoholiveira/jsonlogic/v3 v3.3.0 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.3 // indirect + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 // indirect + github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/fxamacker/cbor/v2 v2.5.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.15.3 // indirect + github.com/go-redis/redis/v7 v7.4.1 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/gomodule/redigo v1.8.9 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/hashicorp/consul/api v1.24.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.5.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/golang-lru v0.5.0 // indirect - github.com/hashicorp/serf v0.9.5 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect - github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect - github.com/mitchellh/reflectwalk v1.0.0 // indirect - github.com/pebbe/zmq4 v1.2.7 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect - github.com/spiffe/go-spiffe/v2 v2.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/nats-io/nats.go v1.28.0 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/spiffe/go-spiffe/v2 v2.1.6 // indirect + github.com/stretchr/objx v0.5.1 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/errs v1.2.2 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect - google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect + github.com/zeebo/errs v1.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.13.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832 // indirect + google.golang.org/grpc v1.58.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/ms-authentication/go.sum b/ms-authentication/go.sum index 2521773..c7177e4 100644 --- a/ms-authentication/go.sum +++ b/ms-authentication/go.sum @@ -1,336 +1,349 @@ -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 h1:N9r8OBSXAgEUfho3SQtZLY8zo6E1OdOMvelvP22aVFc= -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -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/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 h1:NAHCNOHtaaYnBt6pGtdW++xkFHuAavi2G7Y1OFNu17E= -github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9/go.mod h1:9STzWAIpeXT1gYFvw0JM+BkyMmPKYv/ztBNgXX4hAOw= -github.com/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= -github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 h1:C6ev04yPwmGGfqCcE3mScI5eWc8udLOAIoecV2CV2Vg= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0/go.mod h1:okglOXFO85xwM6bdwB6nMAigOB9wDc24MfcP0/UDYEU= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 h1:4UVNGRaKbkH5aEhQrto26Q65ydmhZYReRw/6ZNQ5J5E= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0/go.mod h1:JKRxVTC5g1IRoQuT6T7pW6O6XnfjQTZgFjEazPHAHng= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 h1:Sfi9jAIgRXZaJQw8Ji6+8//47D+iOyGiXQSNZXhy3HE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0/go.mod h1:jyfVSx7mI3u/o/oo10COxBRBvJ8O/9I3z2xAwPmNt/Q= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 h1:FdnA7hLq0U8PeMAIuJXt4KcXLAyGo7OjckzxTAwaoBc= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0/go.mod h1:+X6C0h8ZTJe+lLU2AGJfiAzCJK3zL+yM6cej9VC+79E= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 h1:Rqr1CgBXppAeehCkPAHQ6hjyLlm2KTR4IKiKpExm7gg= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0/go.mod h1:dQiOiga0KMGHXqFs4nI+Rp19hQR3gZ+3lDRgI9x5Q7M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/diegoholiveira/jsonlogic/v3 v3.3.0 h1:XdIxQ+ICFcQB9tVf46cmiCkc5K9MN8Sh/x+XDHL+iXM= +github.com/diegoholiveira/jsonlogic/v3 v3.3.0/go.mod h1:9oE8z9G+0OMxOoLHF3fhek3KuqD5CBqM0B6XFL08MSg= +github.com/eclipse/paho.mqtt.golang v1.4.3 h1:2kwcUGn8seMUfWndX0hGbvH8r7crgcJguQNCyp70xik= +github.com/eclipse/paho.mqtt.golang v1.4.3/go.mod h1:CSYvoAlsMkhYOXh/oKyxa8EcBci6dVkLCbo5tTC1RIE= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 h1:EclqSAArZtevlyyJu6TJXjWo6MS7OeQkdD/SOz11r+U= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1/go.mod h1:sgH/44+BsOXtqFnot5bkbyJlJzISD9jiuudKxgnCgmg= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 h1:gXVxaZPcRJl2MhCIK/GOXZnQL+21xOUpGDTLTcVCxSk= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1/go.mod h1:Or09TpF5HF3FjlqX3kJEFhBCsTvbHY0Nu28UF0MvB3w= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 h1:rdk8KMcU8fA6o9MCb0O68bboxZTdLiXTZByNttEtRwE= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0/go.mod h1:8RlYm5CPzZgUsfXDWVP1TIeUMhsDNIdRdj1HXdomtOI= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 h1:xjwCI34DLM31cSl1q9XmYgXS3JqXufQJMgohnLLLDx0= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0/go.mod h1:zzzWGWij6wAqm1go9TLs++TFMIsBqBb1eRnIj4mRxGw= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 h1:nU37Uo4/kloTMrdqDN9SJuDoXb3FpHaMdwVbHtn9PPk= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0/go.mod h1:x2CueD9gn/CmtCvDNFgrgBnR+B1iWJMSrC5+gesfDJ0= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 h1:6LXGElSScCCQzNpR3WjcgVz0RUc9GbfxETvif/4++iI= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0/go.mod h1:SGyo4fAHzOhDAd2Usa9RaBT/sOzkbceIqLrDG0+iYy8= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 h1:XyoDjeeVBMNwlJb6ljcTOl1QOp5gabcJc7pYSPYKNPA= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1/go.mod h1:Ts9l+TknRKaqFsXmrTuKyV1Y5qIr+eiexVYkQuXnfxk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= -github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-redis/redis/v7 v7.3.0 h1:3oHqd0W7f/VLKBxeYTEpqdMUsmMectngjM9OtoRoIgg= -github.com/go-redis/redis/v7 v7.3.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE= +github.com/fxamacker/cbor/v2 v2.5.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.15.3 h1:S+sSpunYjNPDuXkWbK+x+bA7iXiW296KG4dL3X7xUZo= +github.com/go-playground/validator/v10 v10.15.3/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-redis/redis/v7 v7.4.1 h1:PASvf36gyUpr2zdOUS/9Zqc80GbM+9BDyiJSJDDOrTI= +github.com/go-redis/redis/v7 v7.4.1/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomodule/redigo v1.8.8 h1:f6cXq6RRfiyrOJEV7p3JhLDlmawGBVBBP1MggY8Mo4E= -github.com/gomodule/redigo v1.8.8/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws= +github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/consul/api v1.9.1 h1:SngrdG2L62qqLsUz85qcPhFZ78rPf8tcD5qjMgs6MME= -github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/consul/api v1.24.0 h1:u2XyStA2j0jnCiVUU7Qyrt8idjRn4ORhK6DlvZ3bWhA= +github.com/hashicorp/consul/api v1.24.0/go.mod h1:NZJGRFYruc/80wYowkPFCp1LbGmJC9L8izrwfyVx/Wg= +github.com/hashicorp/consul/sdk v0.14.1 h1:ZiwE2bKb+zro68sWzZ1SgHF3kRMBZ94TwOCFRF4ylPs= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 h1:t7sYxdPJZ2wjZgFpD+B+rx1Jk//5hkiEDW2ptwjhXAc= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0/go.mod h1:ov2jYqRbWFWuzgUGt6+LMiE+SBkUpI+qzgIWCipFlCo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +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.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 h1:DcITQwl3ymmg7i1XfwpZFs/TPv2PuTwxE8bnuKVtKlk= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54/go.mod h1:dIfpPVUR+ZfkzkDcKnn+oPW1jKeXe4WlNWc7rIXOVxM= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= +github.com/nats-io/nats.go v1.28.0 h1:Th4G6zdsz2d0OqXdfzKLClo6bOfoI/b1kInhRtFIy5c= +github.com/nats-io/nats.go v1.28.0/go.mod h1:XpbWUlOElGwTYbMR7imivs7jJj9GtK7ypv321Wp6pjc= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pebbe/zmq4 v1.2.7 h1:6EaX83hdFSRUEhgzSW1E/SPoTS3JeYZgYkBvwdcrA9A= -github.com/pebbe/zmq4 v1.2.7/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/spiffe/go-spiffe/v2 v2.0.0 h1:y6N7BZAxgaFZYELyrIdxSMm2e2tWpzgQewUts9h1hfM= -github.com/spiffe/go-spiffe/v2 v2.0.0/go.mod h1:TEfgrEcyFhuSuvqohJt6IxENUNeHfndWCCV1EX7UaVk= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spiffe/go-spiffe/v2 v2.1.6 h1:4SdizuQieFyL9eNU+SPiCArH4kynzaKOOj0VvM8R7Xo= +github.com/spiffe/go-spiffe/v2 v2.1.6/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0= +github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= -github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832 h1:o4LtQxebKIJ4vkzyhtD2rfUNZ20Zf0ik5YVP5E7G7VE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o= +google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/ms-authentication/main.go b/ms-authentication/main.go index 88f7b7d..9cf5d14 100644 --- a/ms-authentication/main.go +++ b/ms-authentication/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -7,7 +7,7 @@ import ( "ms-authentication/routes" "os" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg" ) const ( @@ -15,8 +15,6 @@ const ( ) func main() { - // TODO: See https://docs.edgexfoundry.org/2.2/microservices/application/ApplicationServices/ - // for documentation on application services. var ok bool service, ok := pkg.NewAppService(serviceKey) if !ok { @@ -30,8 +28,8 @@ func main() { lc.Errorf("failed to add all Routes: %s", err.Error()) os.Exit(1) } - if err := service.MakeItRun(); err != nil { - lc.Errorf("MakeItRun returned error: %s", err.Error()) + if err := service.Run(); err != nil { + lc.Errorf("Run returned error: %s", err.Error()) os.Exit(1) } diff --git a/ms-authentication/res/configuration.toml b/ms-authentication/res/configuration.toml deleted file mode 100644 index fcefdc9..0000000 --- a/ms-authentication/res/configuration.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -[Writable] -LogLevel = 'INFO' - -[Service] -ClientMonitor = '15s' -HealthCheckInterval = '10s' -Host = 'localhost' -Port = 48096 -ReadMaxLimit = 100 -StartupMsg = 'This microservice checks if ID numbers from REST requests are authenticated' -RequestTimeout = '30s' -MaxRequestSize = 0 - -[Registry] -Host = "localhost" -Port = 8500 -Type = 'consul' - -[Trigger] -Type="http" - -[ApplicationSettings] \ No newline at end of file diff --git a/ms-authentication/res/configuration.yaml b/ms-authentication/res/configuration.yaml new file mode 100644 index 0000000..1f1445d --- /dev/null +++ b/ms-authentication/res/configuration.yaml @@ -0,0 +1,13 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +Writable: + LogLevel: INFO + +Service: + Host: localhost + Port: 48096 + StartupMsg: This microservice checks if ID numbers from REST requests are authenticated + +Trigger: + Type: http diff --git a/ms-authentication/routes/common.go b/ms-authentication/routes/common.go index 0cb501e..2b504c5 100644 --- a/ms-authentication/routes/common.go +++ b/ms-authentication/routes/common.go @@ -4,9 +4,9 @@ package routes import ( - "errors" - - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "encoding/json" + "fmt" + "os" ) // PeopleFileName is the name of the respective struct data file that @@ -23,32 +23,59 @@ const CardsFileName = "cards.json" // WritePeople writes data to the respective JSON file func (people *People) WritePeople() (err error) { - return utilities.WriteToJSONFile(PeopleFileName, people, 0644) + peopleJson, err := json.Marshal(people) + if err != nil { + return fmt.Errorf("failed to marshal people: %s", err.Error()) + } + err = os.WriteFile(PeopleFileName, peopleJson, 0644) + if err != nil { + return fmt.Errorf("failed to write people data to file: %s", err.Error()) + } + return nil } // WriteAccounts writes data to the respective JSON file func (accounts *Accounts) WriteAccounts() (err error) { - return utilities.WriteToJSONFile(AccountsFileName, accounts, 0644) + accountsJson, err := json.Marshal(accounts) + if err != nil { + return fmt.Errorf("failed to marshal accounts: %s", err.Error()) + } + err = os.WriteFile(AccountsFileName, accountsJson, 0644) + if err != nil { + return fmt.Errorf("failed to write accounts data to file: %s", err.Error()) + } + return } // WriteCards writes data to the respective JSON file func (cards *Cards) WriteCards() (err error) { - return utilities.WriteToJSONFile(CardsFileName, cards, 0644) + cardsJson, err := json.Marshal(cards) + if err != nil { + return fmt.Errorf("failed to marshal cards: %s", err.Error()) + } + err = os.WriteFile(CardsFileName, cardsJson, 0644) + if err != nil { + return fmt.Errorf("failed to write cards data to file: %s", err.Error()) + } + return } // DeletePeople writes an empty list to the respective JSON file func DeletePeople() (err error) { - return utilities.WriteToJSONFile(PeopleFileName, People{People: []Person{}}, 0644) + people := People{People: []Person{}} + return people.WritePeople() } // DeleteAccounts writes an empty list to the respective JSON file func DeleteAccounts() (err error) { - return utilities.WriteToJSONFile(AccountsFileName, Accounts{Accounts: []Account{}}, 0644) + accounts := Accounts{Accounts: []Account{}} + return accounts.WriteAccounts() } // DeleteCards writes an empty list to the respective JSON file func DeleteCards() (err error) { - return utilities.WriteToJSONFile(CardsFileName, Cards{Cards: []Card{}}, 0644) + cards := Cards{Cards: []Card{}} + return cards.WriteCards() } // DeletePerson deletes from the list @@ -83,33 +110,36 @@ func (cards *Cards) DeleteCard(cardToDelete Card) { // GetPeopleData reads the data from the respective JSON file func GetPeopleData() (people People, err error) { - err = utilities.LoadFromJSONFile(PeopleFileName, &people) + data, err := os.ReadFile(PeopleFileName) if err != nil { - return people, errors.New( - "Failed to load people from JSON file: " + err.Error(), - ) + return People{}, fmt.Errorf("failed to read from people JSON file: %s", err.Error()) + } + if err = json.Unmarshal(data, &people); err != nil { + return People{}, fmt.Errorf("failed to unmarshal people from JSON file: %s", err.Error()) } return } // GetAccountsData reads the data from the respective JSON file func GetAccountsData() (accounts Accounts, err error) { - err = utilities.LoadFromJSONFile(AccountsFileName, &accounts) + data, err := os.ReadFile(AccountsFileName) if err != nil { - return accounts, errors.New( - "Failed to load accounts from JSON file: " + err.Error(), - ) + return Accounts{}, fmt.Errorf("failed to read from accounts JSON file: %s", err.Error()) + } + if err = json.Unmarshal(data, &accounts); err != nil { + return Accounts{}, fmt.Errorf("failed to unmarshal accounts from JSON file: %s", err.Error()) } return } // GetCardsData reads the data from the respective JSON file func GetCardsData() (cards Cards, err error) { - err = utilities.LoadFromJSONFile(CardsFileName, &cards) + data, err := os.ReadFile(CardsFileName) if err != nil { - return cards, errors.New( - "Failed to load cards from JSON file: " + err.Error(), - ) + return Cards{}, fmt.Errorf("failed to read from cards JSON file: %s", err.Error()) + } + if err = json.Unmarshal(data, &cards); err != nil { + return Cards{}, fmt.Errorf("failed to unmarshal cards from JSON file: %s", err.Error()) } return } diff --git a/ms-authentication/routes/common_test.go b/ms-authentication/routes/common_test.go index 34baf5e..0d3373f 100644 --- a/ms-authentication/routes/common_test.go +++ b/ms-authentication/routes/common_test.go @@ -1,14 +1,13 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( - "io/ioutil" + "os" "strconv" "testing" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -22,8 +21,7 @@ func TestWritePeople(t *testing.T) { writePeople := expectedPeople.WritePeople() require.NoError(writePeople, "Failed WritePeople() function") - actualPeople := People{} - loadJSONFileErr := utilities.LoadFromJSONFile(PeopleFileName, &actualPeople) + actualPeople, loadJSONFileErr := GetPeopleData() require.NoError(loadJSONFileErr, "Failed to load people from file") assert.Equal(t, expectedPeople, actualPeople, "Output JSON content mismatch in "+PeopleFileName) @@ -159,7 +157,7 @@ func TestDeletePeople(t *testing.T) { assert.NoError(t, deleteErr, "Failed DeletePeople() function") actualPeople := People{People: []Person{}} - loadJSONFileErr := utilities.LoadFromJSONFile(PeopleFileName, &actualPeople) + actualPeople, loadJSONFileErr := GetPeopleData() require.NoError(t, loadJSONFileErr, "Failed to load people from file") assert.Equal(t, actualPeople, People{People: []Person{}}, "Output JSON content mismatch in "+PeopleFileName) @@ -171,7 +169,7 @@ func TestGetPeopleDataError(t *testing.T) { writePeople := expectedPeople.WritePeople() require.NoError(t, writePeople, "Failed WritePeople() function") - writeErr := ioutil.WriteFile(PeopleFileName, []byte("invalid json test"), 0644) + writeErr := os.WriteFile(PeopleFileName, []byte("invalid json test"), 0644) require.NoError(t, writeErr, "Failed to write to test file") _, err := GetPeopleData() assert.Error(t, err, "Expected failure calling GetPeopleData() for invalid JSON contents but did not get one") @@ -187,8 +185,7 @@ func TestWriteAccounts(t *testing.T) { require.NoError(writeAccounts, "Failed WriteAccounts() function") // load accounts from file to validate - accountsFromFile := Accounts{} - loadJSONFileErr := utilities.LoadFromJSONFile(AccountsFileName, &accountsFromFile) + accountsFromFile, loadJSONFileErr := GetAccountsData() require.NoError(loadJSONFileErr, "Failed to load accounts from file") assert.Equal(t, expectedAccounts, accountsFromFile, "Output JSON content mismatch in "+AccountsFileName) @@ -387,8 +384,7 @@ func TestDeleteAccounts(t *testing.T) { assert.NoError(t, deleteErr, "Failed DeleteAccounts() function") // load accounts from file to validate - accountsFromFile := Accounts{Accounts: []Account{}} - loadJSONFileErr := utilities.LoadFromJSONFile(AccountsFileName, &accountsFromFile) + accountsFromFile, loadJSONFileErr := GetAccountsData() require.NoError(t, loadJSONFileErr, "Failed to load accounts from file") assert.Equal(t, accountsFromFile, Accounts{Accounts: []Account{}}, "Output JSON content mismatch in "+AccountsFileName) @@ -400,7 +396,7 @@ func TestGetAccountsDataError(t *testing.T) { writeAccounts := expectedAccounts.WriteAccounts() require.NoError(t, writeAccounts, "Failed WriteAccounts() function") - writeErr := ioutil.WriteFile(AccountsFileName, []byte("invalid json test"), 0644) + writeErr := os.WriteFile(AccountsFileName, []byte("invalid json test"), 0644) require.NoError(t, writeErr, "Failed to write to test file") _, err := GetAccountsData() assert.Error(t, err, "Expected failure calling GetAccountsData() for invalid JSON contents but did not get one") @@ -416,8 +412,7 @@ func TestWriteCards(t *testing.T) { require.NoError(writeCards, "Failed WriteCards() function") // load cards from file to validate - cardsFromFile := Cards{} - loadJSONFileErr := utilities.LoadFromJSONFile(CardsFileName, &cardsFromFile) + cardsFromFile, loadJSONFileErr := GetCardsData() require.NoError(loadJSONFileErr, "Failed to load cards from file") assert.Equal(t, expectedCards, cardsFromFile, "Output JSON content mismatch in "+CardsFileName) @@ -557,8 +552,7 @@ func TestDeleteCards(t *testing.T) { require.NoError(deleteErr, "Failed DeleteCards() function") // load cards from file to validate - cardsFromFile := Cards{Cards: []Card{}} - loadJSONFileErr := utilities.LoadFromJSONFile(CardsFileName, &cardsFromFile) + cardsFromFile, loadJSONFileErr := GetCardsData() require.NoError(loadJSONFileErr, "Failed to load cards from file") assert.Equal(t, cardsFromFile, Cards{Cards: []Card{}}, "Output JSON content mismatch in "+CardsFileName) @@ -570,7 +564,7 @@ func TestGetCardsDataError(t *testing.T) { writeCards := expectedCards.WriteCards() require.NoError(t, writeCards, "Failed WriteCards() function") - writeErr := ioutil.WriteFile(CardsFileName, []byte("invalid json test"), 0644) + writeErr := os.WriteFile(CardsFileName, []byte("invalid json test"), 0644) require.NoError(t, writeErr, "Failed to write to test file") _, err := GetCardsData() assert.Error(t, err, "Expected failure calling GetCardsData() for invalid JSON contents but did not get one") diff --git a/ms-authentication/routes/controller.go b/ms-authentication/routes/controller.go index 2a29dcb..b58fc46 100644 --- a/ms-authentication/routes/controller.go +++ b/ms-authentication/routes/controller.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -6,8 +6,8 @@ package routes import ( "fmt" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) type Controller struct { diff --git a/ms-authentication/routes/controller_test.go b/ms-authentication/routes/controller_test.go index 68067ec..287f672 100644 --- a/ms-authentication/routes/controller_test.go +++ b/ms-authentication/routes/controller_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -7,8 +7,8 @@ import ( "fmt" "testing" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) diff --git a/ms-authentication/routes/gets.go b/ms-authentication/routes/gets.go index de31d85..453d0f1 100644 --- a/ms-authentication/routes/gets.go +++ b/ms-authentication/routes/gets.go @@ -1,13 +1,13 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "net/http" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) // AuthenticationGet accepts a 10-character URL parameter in the form: @@ -20,7 +20,8 @@ func (c *Controller) AuthenticationGet(writer http.ResponseWriter, req *http.Req // check if the passed cardID is valid if cardID == "" || len(cardID) != 10 { c.lc.Infof("Please pass in a 10-character card ID as a URL parameter, like this: /authentication/0001230001") - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Please pass in a 10-character card ID as a URL parameter, like this: /authentication/0001230001", false) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Please pass in a 10-character card ID as a URL parameter, like this: /authentication/0001230001")) return } @@ -28,20 +29,23 @@ func (c *Controller) AuthenticationGet(writer http.ResponseWriter, req *http.Req cards, err := GetCardsData() if err != nil { c.lc.Errorf("Failed to read authentication data: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to read authentication data", true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("failed to read authentication data")) return } // check if the card's ID matches our given cardID card := cards.GetCardByCardID(cardID) if card.CardID != cardID { - c.lc.Infof("CardID: %s is not an authorized card", cardID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusUnauthorized, "Card ID is not an authorized card", false) + c.lc.Infof("Card ID: %s is not an authorized card", cardID) + writer.WriteHeader(http.StatusUnauthorized) + writer.Write([]byte("Card ID is not an authorized card")) return } if !card.IsValid { - c.lc.Infof("CardID: %s is not an valid card", cardID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusUnauthorized, "Card ID is not a valid card", false) + c.lc.Infof("Card ID: %s is not an valid card", cardID) + writer.WriteHeader(http.StatusUnauthorized) + writer.Write([]byte("Card ID is not a valid card")) return } @@ -49,13 +53,15 @@ func (c *Controller) AuthenticationGet(writer http.ResponseWriter, req *http.Req accounts, err := GetAccountsData() if err != nil { c.lc.Errorf("Failed to read accounts data: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to read accounts data", true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("failed to read accounts data")) return } people, err := GetPeopleData() if err != nil { c.lc.Errorf("Failed to read people data: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to read people data", true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("failed to read people data")) return } @@ -65,13 +71,15 @@ func (c *Controller) AuthenticationGet(writer http.ResponseWriter, req *http.Req // check if the associated person is valid person := people.GetPersonByPersonID(card.PersonID) if person.PersonID != card.PersonID { - c.lc.Infof("CardID is associated with an unknown person %s", person.PersonID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusUnauthorized, "Card ID is associated with an unknown person", false) + c.lc.Infof("Card ID is associated with an unknown person %s", person.PersonID) + writer.WriteHeader(http.StatusUnauthorized) + writer.Write([]byte("Card ID is associated with an unknown person")) return } if !person.IsActive { - c.lc.Infof("CardID is associated with an inactive person %s", person.PersonID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusUnauthorized, "Card ID is associated with an inactive person", false) + c.lc.Infof("Card ID is associated with an inactive person %s", person.PersonID) + writer.WriteHeader(http.StatusUnauthorized) + writer.Write([]byte("Card ID is associated with an inactive person")) return } @@ -81,20 +89,26 @@ func (c *Controller) AuthenticationGet(writer http.ResponseWriter, req *http.Req // check if the associated account is valid account := accounts.GetAccountByAccountID(person.AccountID) if account.AccountID != person.AccountID { - c.lc.Infof("CardID is associated with an unknown account %s", person.AccountID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusUnauthorized, "Card ID is associated with an unknown account", false) + c.lc.Infof("Card ID is associated with an unknown account %s", person.AccountID) + writer.WriteHeader(http.StatusUnauthorized) + writer.Write([]byte("Card ID is associated with an unknown account")) return } if !account.IsActive { - c.lc.Infof("CardID is associated with an inactive account %s", person.AccountID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusUnauthorized, "Card ID is associated with an inactive account", false) + c.lc.Infof("Card ID is associated with an inactive account %s", person.AccountID) + writer.WriteHeader(http.StatusUnauthorized) + writer.Write([]byte("Card ID is associated with an inactive account")) return } // store the accountID in the output AuthData authData.AccountID = account.AccountID - authDataJSON, _ := utilities.GetAsJSON(authData) + authDataJSON, err := json.Marshal(authData) + if err != nil { + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("failed to marshal authentication data")) + } // Because of how type-safe Go is, it's actually impossible to // reach this error condition based on how this function is written @@ -105,5 +119,5 @@ func (c *Controller) AuthenticationGet(writer http.ResponseWriter, req *http.Req // as fact) c.lc.Infof("Successfully authenticated person and card") - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, authDataJSON, false) + writer.Write(authDataJSON) } diff --git a/ms-authentication/routes/gets_test.go b/ms-authentication/routes/gets_test.go index 3dd00bf..d98a210 100644 --- a/ms-authentication/routes/gets_test.go +++ b/ms-authentication/routes/gets_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -6,16 +6,16 @@ package routes import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/http/httptest" + "os" "strconv" "testing" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -228,19 +228,19 @@ func TestAuthenticationGet(t *testing.T) { WriteInvalidFile string AuthData AuthData StatusCode int - CompareValues bool + ExpectedError string }{ - {"cardID length not eq 10", true, "", AuthData{CardID: "00"}, http.StatusBadRequest, false}, - {"Successful auth sequence", true, "", validAuthData, http.StatusOK, true}, - {"Test inactive person", true, "", AuthData{CardID: cards.Cards[1].CardID}, http.StatusUnauthorized, false}, - {"Test inactive account", true, "", AuthData{CardID: cards.Cards[2].CardID}, http.StatusUnauthorized, false}, - {"Test inactive card", true, "", AuthData{CardID: cards.Cards[3].CardID}, http.StatusUnauthorized, false}, - {"Test unknown card", true, "", AuthData{CardID: "ffffffffff"}, http.StatusUnauthorized, false}, - {"Test unknown person", true, "", AuthData{CardID: "0001230005"}, http.StatusUnauthorized, false}, - {"Test unknown account", true, "", AuthData{CardID: "0001230006"}, http.StatusUnauthorized, false}, - {"TestAuthenticationGet invalid cards JSON", true, CardsFileName, validAuthData, http.StatusInternalServerError, false}, - {"TestAuthenticationGet invalid accounts JSON", true, AccountsFileName, validAuthData, http.StatusInternalServerError, false}, - {"TestAuthenticationGet invalid people JSON", true, PeopleFileName, validAuthData, http.StatusInternalServerError, false}, + {"cardID length not eq 10", true, "", AuthData{CardID: "00"}, http.StatusBadRequest, "Please pass in a 10-character card ID as a URL parameter, like this: /authentication/0001230001"}, + {"Successful auth sequence", true, "", validAuthData, http.StatusOK, ""}, + {"Test inactive person", true, "", AuthData{CardID: cards.Cards[1].CardID}, http.StatusUnauthorized, "Card ID is associated with an inactive person"}, + {"Test inactive account", true, "", AuthData{CardID: cards.Cards[2].CardID}, http.StatusUnauthorized, "Card ID is associated with an inactive account"}, + {"Test inactive card", true, "", AuthData{CardID: cards.Cards[3].CardID}, http.StatusUnauthorized, "Card ID is not a valid card"}, + {"Test unknown card", true, "", AuthData{CardID: "ffffffffff"}, http.StatusUnauthorized, "Card ID is not an authorized card"}, + {"Test unknown person", true, "", AuthData{CardID: "0001230005"}, http.StatusUnauthorized, "Card ID is associated with an unknown person"}, + {"Test unknown account", true, "", AuthData{CardID: "0001230006"}, http.StatusUnauthorized, "Card ID is associated with an unknown account"}, + {"TestAuthenticationGet invalid cards JSON", true, CardsFileName, validAuthData, http.StatusInternalServerError, "failed to read authentication data"}, + {"TestAuthenticationGet invalid accounts JSON", true, AccountsFileName, validAuthData, http.StatusInternalServerError, "failed to read accounts data"}, + {"TestAuthenticationGet invalid people JSON", true, PeopleFileName, validAuthData, http.StatusInternalServerError, "failed to read people data"}, } for _, test := range tests { currentTest := test @@ -257,7 +257,7 @@ func TestAuthenticationGet(t *testing.T) { } if currentTest.WriteInvalidFile != "" { - err := ioutil.WriteFile(currentTest.WriteInvalidFile, []byte("invalid json test"), 0644) + err := os.WriteFile(currentTest.WriteInvalidFile, []byte("invalid json test"), 0644) require.NoError(err, "Failed to write to test file") } @@ -268,24 +268,22 @@ func TestAuthenticationGet(t *testing.T) { resp := w.Result() defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) require.NoError(err, "Failed to read response body") - responseContent := utilities.HTTPResponse{} - err = json.Unmarshal(body, &responseContent) - require.NoError(err, "Failed to unmarshal response") - assert.Equal(resp.StatusCode, currentTest.StatusCode, "Expected status code to be OK: "+strconv.Itoa(resp.StatusCode)) - if currentTest.CompareValues { + if resp.StatusCode == http.StatusOK { // Unmarshal the string contents of request into a proper structure responseAuthData := AuthData{} - err := json.Unmarshal([]byte(responseContent.Content.(string)), &responseAuthData) + err := json.Unmarshal(body, &responseAuthData) assert.NoError(err, "Failed to unmarshal the authentication data") - assert.False(responseContent.Error, "Expected error to be false") assert.Equal(responseAuthData, currentTest.AuthData) + return } + // check that the error message is as expected + assert.Contains(string(body), currentTest.ExpectedError) }) } } diff --git a/ms-inventory/.golangci.yml b/ms-inventory/.golangci.yml index 61af441..efc6e80 100644 --- a/ms-inventory/.golangci.yml +++ b/ms-inventory/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: diff --git a/ms-inventory/Dockerfile b/ms-inventory/Dockerfile index 864ad32..1300469 100644 --- a/ms-inventory/Dockerfile +++ b/ms-inventory/Dockerfile @@ -1,14 +1,15 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -FROM golang:1.18-alpine3.16 AS builder +FROM golang:1.20-alpine3.17 AS builder LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' # add git for go modules -RUN apk update && apk add --no-cache make git gcc libc-dev zeromq-dev linux-headers +# hadolint ignore=DL3018 +RUN apk update && apk add --no-cache make git ENV GO111MODULE=on WORKDIR /usr/local/bin/ @@ -28,13 +29,12 @@ COPY . . RUN make gobuild # Next image - Copy built Go binary into new workspace -FROM alpine +FROM alpine:3.17 LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' -RUN apk --no-cache add zeromq -COPY --from=builder /usr/local/bin/ms-inventory/res/configuration.toml /res/configuration.toml +COPY --from=builder /usr/local/bin/ms-inventory/res/configuration.yaml /res/configuration.yaml COPY --from=builder /usr/local/bin/ms-inventory/main /ms-inventory COPY --from=builder /usr/local/bin/ms-inventory/inventory.json /tmp/inventory.json COPY --from=builder /usr/local/bin/ms-inventory/auditlog.json /tmp/auditlog.json diff --git a/ms-inventory/LICENSE b/ms-inventory/LICENSE index 7bad583..4f84e34 100644 --- a/ms-inventory/LICENSE +++ b/ms-inventory/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/ms-inventory/Makefile b/ms-inventory/Makefile index 05390b8..bad0c3c 100644 --- a/ms-inventory/Makefile +++ b/ms-inventory/Makefile @@ -1,9 +1,9 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build gobuild run gorun stop test lint -MICROSERVICE=automated-checkout/ms-inventory +MICROSERVICE=automated-vending/ms-inventory ARCH=$(shell uname -m) @@ -19,7 +19,7 @@ docker: . gobuild: tidy - CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a -installsuffix cgo main.go + CGO_ENABLED=0 GOOS=linux go build -ldflags='-s -w' -a main.go run: docker run \ @@ -34,10 +34,10 @@ stop: docker rm -f $(MICROSERVICE):dev test: - go test -tags no_zmq -test.v -cover ./... + go test -test.v -cover ./... testHTML: - go test -tags no_zmq -test.v -coverprofile=test_coverage.out ./... && \ + go test -test.v -coverprofile=test_coverage.out ./... && \ go tool cover -html=test_coverage.out lint: diff --git a/ms-inventory/go.mod b/ms-inventory/go.mod index 1374cd7..9d2b315 100644 --- a/ms-inventory/go.mod +++ b/ms-inventory/go.mod @@ -1,74 +1,80 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module ms-inventory -go 1.18 +go 1.20 require ( - github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 - github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 + github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 + github.com/google/uuid v1.3.0 github.com/gorilla/mux v1.8.0 - github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.2 ) require ( - bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 // indirect - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/armon/go-metrics v0.3.10 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 // indirect + github.com/diegoholiveira/jsonlogic/v3 v3.2.7 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.2 // indirect + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 // indirect + github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 // indirect github.com/fatih/color v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.4.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.13.0 // indirect github.com/go-redis/redis/v7 v7.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gomodule/redigo v1.8.8 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/gomodule/redigo v1.8.9 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/consul/api v1.9.1 // indirect + github.com/hashicorp/consul/api v1.20.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v0.12.0 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/hashicorp/go-hclog v0.14.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/golang-lru v0.5.0 // indirect - github.com/hashicorp/serf v0.9.5 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/kr/pretty v0.3.0 // indirect + github.com/leodido/go-urn v1.2.3 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect - github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect - github.com/mitchellh/reflectwalk v1.0.0 // indirect - github.com/pebbe/zmq4 v1.2.7 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/nats-io/nats.go v1.25.0 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect - github.com/spiffe/go-spiffe/v2 v2.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rogpeppe/go-internal v1.8.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.1.4 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/errs v1.2.2 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + github.com/zeebo/errs v1.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/ms-inventory/go.sum b/ms-inventory/go.sum index 2521773..b070b10 100644 --- a/ms-inventory/go.sum +++ b/ms-inventory/go.sum @@ -1,139 +1,143 @@ -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 h1:N9r8OBSXAgEUfho3SQtZLY8zo6E1OdOMvelvP22aVFc= -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 h1:NAHCNOHtaaYnBt6pGtdW++xkFHuAavi2G7Y1OFNu17E= -github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9/go.mod h1:9STzWAIpeXT1gYFvw0JM+BkyMmPKYv/ztBNgXX4hAOw= -github.com/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= -github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 h1:C6ev04yPwmGGfqCcE3mScI5eWc8udLOAIoecV2CV2Vg= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0/go.mod h1:okglOXFO85xwM6bdwB6nMAigOB9wDc24MfcP0/UDYEU= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 h1:4UVNGRaKbkH5aEhQrto26Q65ydmhZYReRw/6ZNQ5J5E= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0/go.mod h1:JKRxVTC5g1IRoQuT6T7pW6O6XnfjQTZgFjEazPHAHng= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 h1:Sfi9jAIgRXZaJQw8Ji6+8//47D+iOyGiXQSNZXhy3HE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0/go.mod h1:jyfVSx7mI3u/o/oo10COxBRBvJ8O/9I3z2xAwPmNt/Q= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 h1:FdnA7hLq0U8PeMAIuJXt4KcXLAyGo7OjckzxTAwaoBc= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0/go.mod h1:+X6C0h8ZTJe+lLU2AGJfiAzCJK3zL+yM6cej9VC+79E= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 h1:Rqr1CgBXppAeehCkPAHQ6hjyLlm2KTR4IKiKpExm7gg= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0/go.mod h1:dQiOiga0KMGHXqFs4nI+Rp19hQR3gZ+3lDRgI9x5Q7M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7 h1:awX07pFPnlntZzRNBcO4a2Ivxa77NMt+narq/6xcS0E= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7/go.mod h1:9oE8z9G+0OMxOoLHF3fhek3KuqD5CBqM0B6XFL08MSg= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 h1:EclqSAArZtevlyyJu6TJXjWo6MS7OeQkdD/SOz11r+U= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1/go.mod h1:sgH/44+BsOXtqFnot5bkbyJlJzISD9jiuudKxgnCgmg= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 h1:gXVxaZPcRJl2MhCIK/GOXZnQL+21xOUpGDTLTcVCxSk= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1/go.mod h1:Or09TpF5HF3FjlqX3kJEFhBCsTvbHY0Nu28UF0MvB3w= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 h1:rdk8KMcU8fA6o9MCb0O68bboxZTdLiXTZByNttEtRwE= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0/go.mod h1:8RlYm5CPzZgUsfXDWVP1TIeUMhsDNIdRdj1HXdomtOI= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 h1:xjwCI34DLM31cSl1q9XmYgXS3JqXufQJMgohnLLLDx0= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0/go.mod h1:zzzWGWij6wAqm1go9TLs++TFMIsBqBb1eRnIj4mRxGw= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 h1:nU37Uo4/kloTMrdqDN9SJuDoXb3FpHaMdwVbHtn9PPk= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0/go.mod h1:x2CueD9gn/CmtCvDNFgrgBnR+B1iWJMSrC5+gesfDJ0= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 h1:6LXGElSScCCQzNpR3WjcgVz0RUc9GbfxETvif/4++iI= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0/go.mod h1:SGyo4fAHzOhDAd2Usa9RaBT/sOzkbceIqLrDG0+iYy8= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 h1:XyoDjeeVBMNwlJb6ljcTOl1QOp5gabcJc7pYSPYKNPA= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1/go.mod h1:Ts9l+TknRKaqFsXmrTuKyV1Y5qIr+eiexVYkQuXnfxk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.13.0 h1:cFRQdfaSMCOSfGCCLB20MHvuoHb/s5G8L5pu2ppK5AQ= +github.com/go-playground/validator/v10 v10.13.0/go.mod h1:dwu7+CG8/CtBiJFZDz4e+5Upb6OLw04gtBYw0mcG/z4= github.com/go-redis/redis/v7 v7.3.0 h1:3oHqd0W7f/VLKBxeYTEpqdMUsmMectngjM9OtoRoIgg= github.com/go-redis/redis/v7 v7.3.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomodule/redigo v1.8.8 h1:f6cXq6RRfiyrOJEV7p3JhLDlmawGBVBBP1MggY8Mo4E= -github.com/gomodule/redigo v1.8.8/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= +github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws= +github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/consul/api v1.9.1 h1:SngrdG2L62qqLsUz85qcPhFZ78rPf8tcD5qjMgs6MME= -github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 h1:t7sYxdPJZ2wjZgFpD+B+rx1Jk//5hkiEDW2ptwjhXAc= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0/go.mod h1:ov2jYqRbWFWuzgUGt6+LMiE+SBkUpI+qzgIWCipFlCo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= @@ -141,176 +145,185 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= +github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 h1:DcITQwl3ymmg7i1XfwpZFs/TPv2PuTwxE8bnuKVtKlk= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54/go.mod h1:dIfpPVUR+ZfkzkDcKnn+oPW1jKeXe4WlNWc7rIXOVxM= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= +github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE= +github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pebbe/zmq4 v1.2.7 h1:6EaX83hdFSRUEhgzSW1E/SPoTS3JeYZgYkBvwdcrA9A= -github.com/pebbe/zmq4 v1.2.7/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/spiffe/go-spiffe/v2 v2.0.0 h1:y6N7BZAxgaFZYELyrIdxSMm2e2tWpzgQewUts9h1hfM= -github.com/spiffe/go-spiffe/v2 v2.0.0/go.mod h1:TEfgrEcyFhuSuvqohJt6IxENUNeHfndWCCV1EX7UaVk= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spiffe/go-spiffe/v2 v2.1.4 h1:Z31Ycaf2Z5DF38sQGmp+iGKjBhBlSzfAq68bfy67Mxw= +github.com/spiffe/go-spiffe/v2 v2.1.4/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= -github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -319,18 +332,13 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/ms-inventory/main.go b/ms-inventory/main.go index 734b23d..800a4a6 100644 --- a/ms-inventory/main.go +++ b/ms-inventory/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -8,7 +8,7 @@ import ( "os" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg" ) const ( @@ -52,8 +52,8 @@ func main() { lc.Errorf("failed to add all Routes: %s", err.Error()) os.Exit(1) } - if err := service.MakeItRun(); err != nil { - lc.Errorf("MakeItRun returned error: %s", err.Error()) + if err := service.Run(); err != nil { + lc.Errorf("Run returned error: %s", err.Error()) os.Exit(1) } diff --git a/ms-inventory/res/configuration.toml b/ms-inventory/res/configuration.toml deleted file mode 100644 index 2e831e0..0000000 --- a/ms-inventory/res/configuration.toml +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -[Writable] -LogLevel = 'INFO' - -[Service] -ClientMonitor = '15s' -HealthCheckInterval = '10s' -Host = 'localhost' -Port = 48095 -ReadMaxLimit = 100 -StartupMsg = 'This microservice exposes a CRUD interface for an inventory of items in a Automated Checkout' -RequestTimeout = '30s' -MaxRequestSize = 0 - -[Registry] -Host = "localhost" -Port = 8500 -Type = 'consul' - -[Trigger] -Type="http" - -[ApplicationSettings] -AuditLogFileName = "/tmp/auditlog.json" -InventoryFileName = "/tmp/inventory.json" - diff --git a/ms-inventory/res/configuration.yaml b/ms-inventory/res/configuration.yaml new file mode 100644 index 0000000..ee2bd53 --- /dev/null +++ b/ms-inventory/res/configuration.yaml @@ -0,0 +1,18 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +Writable: + LogLevel: INFO + +Service: + Host: localhost + Port: 48095 + StartupMsg: This microservice exposes a CRUD interface for an inventory of items in an Automated Vending system + +Trigger: + Type: http + +ApplicationSettings: + AuditLogFileName: /tmp/auditlog.json + InventoryFileName: /tmp/inventory.json + diff --git a/ms-inventory/routes/common.go b/ms-inventory/routes/common.go index dc6dd4b..5d4d58b 100644 --- a/ms-inventory/routes/common.go +++ b/ms-inventory/routes/common.go @@ -1,12 +1,13 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "errors" - - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "fmt" + "os" ) // DeleteAllQueryString is a string used across this module to enable @@ -18,13 +19,14 @@ const ( // GetInventoryItems returns a list of InventoryItems by reading the inventory // JSON file func (c *Controller) GetInventoryItems() (inventoryItems Products, err error) { - err = utilities.LoadFromJSONFile(c.inventoryFileName, &inventoryItems) + data, err := os.ReadFile(c.inventoryFileName) if err != nil { - c.lc.Errorf("Failed to load inventory JSON file: %s", err.Error()) - return inventoryItems, errors.New( - "Failed to load inventory JSON file: " + err.Error(), - ) + return inventoryItems, fmt.Errorf("failed to read from inventory file: %s", err.Error()) + } + if err := json.Unmarshal(data, &inventoryItems); err != nil { + return inventoryItems, fmt.Errorf("failed to unmarshal inventory file: %s", err.Error()) } + return } @@ -49,13 +51,15 @@ func (c *Controller) GetInventoryItemBySKU(SKU string) (inventoryItem Product, i // GetAuditLog returns a list of audit log entries by reading from the // audit log JSON file func (c *Controller) GetAuditLog() (auditLog AuditLog, err error) { - err = utilities.LoadFromJSONFile(c.auditLogFileName, &auditLog) + data, err := os.ReadFile(c.auditLogFileName) if err != nil { - c.lc.Errorf("Failed to load audit log JSON file: %s", err.Error()) - return auditLog, errors.New( - "Failed to load audit log JSON file: " + err.Error(), - ) + return auditLog, fmt.Errorf("failed to read from audit log JSON file: %s", err.Error()) + } + + if err := json.Unmarshal(data, &auditLog); err != nil { + return auditLog, fmt.Errorf("failed to unmarshal audit log JSON file: %s", err.Error()) } + return } @@ -91,8 +95,16 @@ func (c *Controller) DeleteAuditLog() error { // WriteJSON is a shorthand for writing an interface to JSON func (c *Controller) WriteJSON(fileName string, content interface{}) error { - c.lc.Debugf("Wrote: %s to Inventory JSON: %s", content, fileName) - return utilities.WriteToJSONFile(fileName, content, 0644) + c.lc.Debugf("Writing: %s to Inventory JSON: %s", content, fileName) + data, err := json.Marshal(content) + if err != nil { + return fmt.Errorf("failed to marshal data: %s", err.Error()) + } + err = os.WriteFile(fileName, data, 0644) + if err != nil { + return fmt.Errorf("failed to write data to file: %s", err.Error()) + } + return nil } // WriteInventory is a shorthand for writing the inventory quickly diff --git a/ms-inventory/routes/common_test.go b/ms-inventory/routes/common_test.go index 4c578c3..34fc7d8 100644 --- a/ms-inventory/routes/common_test.go +++ b/ms-inventory/routes/common_test.go @@ -1,15 +1,13 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( - "io/ioutil" "os" "testing" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/require" ) @@ -71,8 +69,7 @@ func TestWriteInventory(t *testing.T) { }() // load product from file to validate - productsFromFile := Products{} - err = utilities.LoadFromJSONFile(c.inventoryFileName, &productsFromFile) + productsFromFile, err := c.GetInventoryItems() require.NoError(t, err) // Check to make sure items match @@ -201,14 +198,14 @@ func TestGetInventoryItemErrors(t *testing.T) { }() t.Run("Test GetInventoryItems Error", func(t *testing.T) { - err := ioutil.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) require.NoError(t, err) _, err = c.GetInventoryItems() require.NotNil(t, err, "Expected inventory get to fail") }) t.Run("Test GetInventoryItemBySKU Error", func(t *testing.T) { - err := ioutil.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) require.NoError(t, err) _, _, err = c.GetInventoryItemBySKU(products.Data[0].SKU) @@ -296,7 +293,7 @@ func TestWriteAuditLog(t *testing.T) { // load audits from file to validate auditsFromFile := AuditLog{} - err = utilities.LoadFromJSONFile(AuditLogFileName, &auditsFromFile) + auditsFromFile, err = c.GetAuditLog() require.NoError(t, err) // Check to make sure audit entries match @@ -437,14 +434,14 @@ func TestGetAuditLogErrors(t *testing.T) { entryIDToReturn := "1" t.Run("Test GetAuditLog Error", func(t *testing.T) { - err := ioutil.WriteFile(AuditLogFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(AuditLogFileName, []byte("invalid json test"), 0644) require.NoError(t, err) _, err = c.GetAuditLog() require.NotNil(t, err, "Expected audit log get to fail") }) t.Run("Test GetAuditLogEntryByID Error", func(t *testing.T) { - err := ioutil.WriteFile(AuditLogFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(AuditLogFileName, []byte("invalid json test"), 0644) require.NoError(t, err) _, _, err = c.GetAuditLogEntryByID(entryIDToReturn) diff --git a/ms-inventory/routes/controller.go b/ms-inventory/routes/controller.go index e9d3e8e..fb9386f 100644 --- a/ms-inventory/routes/controller.go +++ b/ms-inventory/routes/controller.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -7,8 +7,8 @@ import ( "fmt" "net/http" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) type Controller struct { diff --git a/ms-inventory/routes/controller_test.go b/ms-inventory/routes/controller_test.go index 7af236d..43acb02 100644 --- a/ms-inventory/routes/controller_test.go +++ b/ms-inventory/routes/controller_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -7,8 +7,8 @@ import ( "fmt" "testing" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) diff --git a/ms-inventory/routes/deletes.go b/ms-inventory/routes/deletes.go index e82f0e1..6acbe18 100644 --- a/ms-inventory/routes/deletes.go +++ b/ms-inventory/routes/deletes.go @@ -1,14 +1,14 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "fmt" "net/http" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) // InventoryDelete allows deletion of an inventory item or multiple items @@ -18,7 +18,8 @@ func (c *Controller) InventoryDelete(writer http.ResponseWriter, req *http.Reque SKU := vars["sku"] if SKU == "" { c.lc.Errorf("Empty inventory item SKU") - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Please enter a valid inventory item in the form of /inventory/{sku}", true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Please enter a valid inventory item in the form of /inventory/{sku}")) return } // if the user wants to delete all inventory, do it @@ -26,17 +27,18 @@ func (c *Controller) InventoryDelete(writer http.ResponseWriter, req *http.Reque err := c.DeleteInventory() if err != nil { c.lc.Errorf("Failed to properly reset inventory: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to properly reset inventory: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to properly reset inventory: " + err.Error())) return } - emptyInventoryResponseJSON, err := utilities.GetAsJSON(Products{Data: []Product{}}) + emptyInventoryResponseJSON, err := json.Marshal(Products{Data: []Product{}}) if err != nil { c.lc.Errorf("Failed to serialize empty inventory response: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to serialize empty inventory response: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to serialize empty inventory response: " + err.Error())) return } - - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, emptyInventoryResponseJSON, false) + writer.Write(emptyInventoryResponseJSON) return } // look up the requested inventory item by SKU @@ -44,14 +46,16 @@ func (c *Controller) InventoryDelete(writer http.ResponseWriter, req *http.Reque c.inventoryItems = inventoryItems if err != nil { c.lc.Errorf("Failed to get requested inventory item by SKU: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to get requested inventory item by SKU: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to get requested inventory item by SKU: " + err.Error())) return } // check if GetInventoryItemBySKU found an inventory item to delete if inventoryItemToDelete.SKU == "" { c.lc.Info("Item does not exist") - utilities.WriteStringHTTPResponse(writer, req, http.StatusNotFound, "Item does not exist", false) + writer.WriteHeader(http.StatusNotFound) + writer.Write([]byte("Item does not exist")) return } // delete the inventory item & write the modified inventory @@ -59,16 +63,18 @@ func (c *Controller) InventoryDelete(writer http.ResponseWriter, req *http.Reque err = c.WriteInventory() if err != nil { c.lc.Errorf("Failed to write updated inventory: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to write updated inventory", true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to write updated inventory")) return } - inventoryItemToDeleteJSON, err := utilities.GetAsJSON(inventoryItemToDelete) + inventoryItemToDeleteJSON, err := json.Marshal(inventoryItemToDelete) if err != nil { c.lc.Errorf("Successfully deleted the item from inventory, but failed to serialize it so that it could be sent back to the requester: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, fmt.Sprintf("Successfully deleted the item from inventory, but failed to serialize it so that it could be sent back to the requester: %v", err.Error()), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(fmt.Sprintf("Successfully deleted the item from inventory, but failed to serialize it so that it could be sent back to the requester: %v", err.Error()))) } c.lc.Infof("Successfully deleted the item: %s from inventory", inventoryItemToDelete.SKU) - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, inventoryItemToDeleteJSON, false) + writer.Write(inventoryItemToDeleteJSON) } // AuditLogDelete allows deletion of one or more audit log entry items @@ -78,7 +84,8 @@ func (c *Controller) AuditLogDelete(writer http.ResponseWriter, req *http.Reques entryID := vars["entry"] if entryID == "" { c.lc.Error("EntryID is empty") - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Please enter a valid audit log entry ID in the form of /auditlog/{entryId}", true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Please enter a valid audit log entry ID in the form of /auditlog/{entryId}")) return } // if the user wants to delete all inventory, do it @@ -86,16 +93,18 @@ func (c *Controller) AuditLogDelete(writer http.ResponseWriter, req *http.Reques err := c.DeleteAuditLog() if err != nil { c.lc.Errorf("Failed to reset audit log: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to properly reset audit log: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to properly reset audit log: " + err.Error())) return } - emptyAuditLogResponseJSON, err := utilities.GetAsJSON(AuditLog{Data: []AuditLogEntry{}}) + emptyAuditLogResponseJSON, err := json.Marshal(AuditLog{Data: []AuditLogEntry{}}) if err != nil { c.lc.Errorf("Failed to serialize empty audit log response: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, fmt.Sprintf("Failed to serialize empty audit log response: %v", err.Error()), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(fmt.Sprintf("Failed to serialize empty audit log response: %v", err.Error()))) } c.lc.Info("Successfully deleted audit log") - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, emptyAuditLogResponseJSON, false) + writer.Write(emptyAuditLogResponseJSON) return } // look up the requested audit log entry by EntryID @@ -103,14 +112,16 @@ func (c *Controller) AuditLogDelete(writer http.ResponseWriter, req *http.Reques c.auditLog = auditLog if err != nil { c.lc.Errorf("Failed to get audit log entry ID: %s with error: %s", entryID, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to get requested audit log entry by ID: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to get requested audit log entry by ID: " + err.Error())) return } // check if GetAuditLogEntryByID found an audit log entry to delete if auditLogEntryToDelete.AuditEntryID == "" { c.lc.Errorf("Item with entry ID: %s does not exist", auditLogEntryToDelete.AuditEntryID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusNotFound, "Item does not exist", false) + writer.WriteHeader(http.StatusNotFound) + writer.Write([]byte("Item does not exist")) return } // delete the audit log entry & write the modified audit log @@ -118,14 +129,16 @@ func (c *Controller) AuditLogDelete(writer http.ResponseWriter, req *http.Reques err = c.WriteAuditLog() if err != nil { c.lc.Error("Failed to write updated audit log") - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to write updated audit log", true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to write updated audit log")) return } - auditLogEntryToDeleteJSON, err := utilities.GetAsJSON(auditLogEntryToDelete) + auditLogEntryToDeleteJSON, err := json.Marshal(auditLogEntryToDelete) if err != nil { c.lc.Errorf("Successfully deleted item: %s from audit log, but failed to serialize information back to the requester: %s", auditLogEntryToDelete.AuditEntryID, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, fmt.Sprintf("Successfully deleted item from audit log, but failed to serialize information back to the requester: %v", err.Error()), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(fmt.Sprintf("Successfully deleted item from audit log, but failed to serialize information back to the requester: %v", err.Error()))) } c.lc.Infof("Succssfully deleted item: %s from audit log", auditLogEntryToDelete.AuditEntryID) - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, auditLogEntryToDeleteJSON, false) + writer.Write(auditLogEntryToDeleteJSON) } diff --git a/ms-inventory/routes/deletes_test.go b/ms-inventory/routes/deletes_test.go index 8c18a76..7f26e4a 100644 --- a/ms-inventory/routes/deletes_test.go +++ b/ms-inventory/routes/deletes_test.go @@ -1,17 +1,16 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( "bytes" - "io/ioutil" "net/http" "net/http/httptest" "os" "testing" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/gorilla/mux" "github.com/stretchr/testify/require" ) @@ -55,7 +54,7 @@ func TestInventoryDelete(t *testing.T) { }() if currentTest.BadInventory { - err := ioutil.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteInventory() @@ -124,7 +123,7 @@ func TestAuditLogDelete(t *testing.T) { require.NoError(t, err) if currentTest.BadAuditID { - err := ioutil.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteAuditLog() diff --git a/ms-inventory/routes/gets.go b/ms-inventory/routes/gets.go index d2f2c7f..7f3592d 100644 --- a/ms-inventory/routes/gets.go +++ b/ms-inventory/routes/gets.go @@ -1,13 +1,13 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "net/http" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) // InventoryGet allows for the retrieval of the entire inventory @@ -16,20 +16,22 @@ func (c *Controller) InventoryGet(writer http.ResponseWriter, req *http.Request) c.inventoryItems = inventoryItems if err != nil { c.lc.Errorf("Failed to retrieve all inventory items: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to retrieve all inventory items: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to retrieve all inventory items: " + err.Error())) return } // No logic needs to be done here, since we are just reading the file // and writing it back out. Simply marshaling it will validate its structure - inventoryItemsJSON, err := utilities.GetAsJSON(inventoryItems) + inventoryItemsJSON, err := json.Marshal(inventoryItems) if err != nil { c.lc.Errorf("Failed to process all inventory items: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to process inventory items: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to process inventory items: " + err.Error())) return } c.lc.Infof("Successfully retrieved all inventory items") - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, inventoryItemsJSON, false) + writer.Write(inventoryItemsJSON) } // InventoryItemGet allows for a single inventory item to be retrieved by SKU @@ -40,26 +42,31 @@ func (c *Controller) InventoryItemGet(writer http.ResponseWriter, req *http.Requ inventoryItem, _, err := c.GetInventoryItemBySKU(sku) if err != nil { c.lc.Errorf("Failed to get inventory item by SKU: %s with error: %s", sku, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to get inventory item by SKU: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to get inventory item by SKU: " + err.Error())) return } if inventoryItem.SKU == "" { c.lc.Infof("SKU is empty") - utilities.WriteStringHTTPResponse(writer, req, http.StatusNotFound, "", false) + writer.WriteHeader(http.StatusNotFound) + writer.Write([]byte("")) return } - outputInventoryItemJSON, err := utilities.GetAsJSON(inventoryItem) + outputInventoryItemJSON, err := json.Marshal(inventoryItem) if err != nil { c.lc.Errorf("Failed to process inventory item with SKU: %s with error: %s", sku, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to process the requested inventory item "+sku+":"+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to process the requested inventory item " + sku + ":" + err.Error())) return } c.lc.Infof("Succcessfully got inventory item by SKU: %s", sku) - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, outputInventoryItemJSON, false) + writer.WriteHeader(http.StatusOK) + writer.Write([]byte(outputInventoryItemJSON)) return } c.lc.Error("Valid inventory item not in the form of /inventory/{sku}") - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Please enter a valid inventory item in the form of /inventory/{sku}", false) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Please enter a valid inventory item in the form of /inventory/{sku}")) } // AuditLogGetAll allows all audit log entries to be retrieved @@ -68,20 +75,22 @@ func (c *Controller) AuditLogGetAll(writer http.ResponseWriter, req *http.Reques c.auditLog = auditLog if err != nil { c.lc.Errorf("Failed to retrieve all audit log entries: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to retrieve all audit log entries: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to retrieve all audit log entries: " + err.Error())) return } // No logic needs to be done here, since we are just reading the file // and writing it back out. Simply marshaling it will validate its structure - auditLogJSON, err := utilities.GetAsJSON(auditLog) + auditLogJSON, err := json.Marshal(auditLog) if err != nil { c.lc.Errorf("Failed to process audit log entries: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to process audit log entries: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to process audit log entries: " + err.Error())) return } c.lc.Infof("Successfully retrieved all audit log entries") - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, auditLogJSON, false) + writer.Write(auditLogJSON) } // AuditLogGetEntry allows a single audit log entry to be retrieved by its @@ -93,24 +102,27 @@ func (c *Controller) AuditLogGetEntry(writer http.ResponseWriter, req *http.Requ auditLogEntry, _, err := c.GetAuditLogEntryByID(entryID) if err != nil { c.lc.Errorf("Failed to get audit log entry ID: %s with error: %s", entryID, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to get audit log entry by ID: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to get audit log entry by ID: " + err.Error())) return } if auditLogEntry.AuditEntryID == "" { c.lc.Info("Audit log entry is not set") - utilities.WriteStringHTTPResponse(writer, req, http.StatusNotFound, "", false) + writer.WriteHeader(http.StatusNotFound) return } - outputAuditLogEntryJSON, err := utilities.GetAsJSON(auditLogEntry) + outputAuditLogEntryJSON, err := json.Marshal(auditLogEntry) if err != nil { c.lc.Errorf("Failed to process the requested audit log entry item: %s with error: %s", entryID, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to process the requested audit log entry item "+entryID+":"+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to process the requested audit log entry item " + entryID + ":" + err.Error())) return } c.lc.Info("Successfully retrieved audit log entry with id: %s", entryID) - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, outputAuditLogEntryJSON, false) + writer.Write(outputAuditLogEntryJSON) return } c.lc.Info("valid entry ID in the form of /auditlog/{entry} not set") - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Please enter a valid entry ID in the form of /auditlog/{entry}", false) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Please enter a valid entry ID in the form of /auditlog/{entry}")) } diff --git a/ms-inventory/routes/gets_test.go b/ms-inventory/routes/gets_test.go index f11c26f..80e4bde 100644 --- a/ms-inventory/routes/gets_test.go +++ b/ms-inventory/routes/gets_test.go @@ -1,16 +1,15 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( - "io/ioutil" "net/http" "net/http/httptest" "os" "testing" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/require" "github.com/gorilla/mux" @@ -42,7 +41,7 @@ func TestInventoryGet(t *testing.T) { require.NoError(t, err) if currentTest.BadInventory { - err := ioutil.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteInventory() @@ -94,7 +93,7 @@ func TestInventoryItemGet(t *testing.T) { if currentTest.WriteInventory { if currentTest.BadInventory { - err := ioutil.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteInventory() @@ -145,7 +144,7 @@ func TestAuditLogGetAll(t *testing.T) { require.NoError(t, err) if currentTest.BadAuditLog { - err := ioutil.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteAuditLog() @@ -201,7 +200,7 @@ func TestAuditLogGetEntry(t *testing.T) { if currentTest.WriteAuditLog { if currentTest.BadAuditLog { - err := ioutil.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteAuditLog() diff --git a/ms-inventory/routes/sets.go b/ms-inventory/routes/sets.go index f524b3f..f0fe9d9 100644 --- a/ms-inventory/routes/sets.go +++ b/ms-inventory/routes/sets.go @@ -1,27 +1,28 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( "encoding/json" + "fmt" + "github.com/google/uuid" "io" "net/http" + "os" "time" - - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) // DeltaInventorySKUPost allows a change in inventory (a delta), via HTTP Post // REST requests to occur func (c *Controller) DeltaInventorySKUPost(writer http.ResponseWriter, req *http.Request) { - response := utilities.GetHTTPResponseTemplate() // Read request body body := make([]byte, req.ContentLength) if _, err := io.ReadFull(req.Body, body); err != nil { c.lc.Errorf("Failed to process the posted delta inventory item(s): %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Failed to process the posted delta inventory item(s): "+err.Error(), true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Failed to process the posted delta inventory item(s): " + err.Error())) return } @@ -30,17 +31,25 @@ func (c *Controller) DeltaInventorySKUPost(writer http.ResponseWriter, req *http err := json.Unmarshal(body, &deltaInventorySKUList) if err != nil { c.lc.Errorf("Failed to process the posted delta inventory item(s): %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Failed to process the posted delta inventory item(s): "+err.Error(), true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Failed to process the posted delta inventory item(s): " + err.Error())) return } // load the inventory.json file var inventoryItems Products - err = utilities.LoadFromJSONFile(c.inventoryFileName, &inventoryItems) + data, err := os.ReadFile(c.inventoryFileName) if err != nil { - c.lc.Errorf("Failed to retrieve all inventory items: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to retrieve all inventory items: "+err.Error(), true) - return + errMsg := fmt.Sprintf("failed to read from inventory items JSON file: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + } + if err = json.Unmarshal(data, &inventoryItems); err != nil { + errMsg := fmt.Sprintf("failed to unmarshal inventory items from JSON file: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) } // iterate over all deltaInventorySKU's and find their corresponding SKU in inventory @@ -61,41 +70,49 @@ func (c *Controller) DeltaInventorySKUPost(writer http.ResponseWriter, req *http // Nothing was done, so return "Not Modified" status if !performedUpdate { c.lc.Info("No change made to inventory") - utilities.WriteStringHTTPResponse(writer, req, http.StatusNotModified, "", false) + writer.WriteHeader(http.StatusNotModified) + writer.Write([]byte("")) return } // Write the updated inventory to the inventory json file - err = utilities.WriteToJSONFile(c.inventoryFileName, inventoryItems, 0644) + inventoryData, err := json.Marshal(inventoryItems) if err != nil { - c.lc.Errorf("Failed to write inventory: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to write inventory: "+err.Error(), true) - return + errMsg := fmt.Sprintf("failed to marshal inventory : %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) } + err = os.WriteFile(c.inventoryFileName, inventoryData, 0644) + if err != nil { + errMsg := fmt.Sprintf("failed to write inventory data to file: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + } + // return the new/updated items as JSON, or if for some reason it cannot be processed back into // JSON for returning to the user, fallback to a simple string - updatedInventoryItemsJSON, err := utilities.GetAsJSON(updatedInventoryItems) + updatedInventoryItemsJSON, err := json.Marshal(updatedInventoryItems) if err != nil { c.lc.Info("Updated inventory successfully") - response.SetStringHTTPResponseFields(http.StatusOK, "Updated inventory successfully", false) + writer.Write([]byte("Updated inventory successfully")) } else { c.lc.Infof("Updated inventory successfully: %s", updatedInventoryItemsJSON) - response.SetJSONHTTPResponseFields(http.StatusOK, updatedInventoryItemsJSON, false) + writer.Write(updatedInventoryItemsJSON) } - response.WriteHTTPResponse(writer, req) } // InventoryPost allows new items to be added to inventory, as well as updating // existing items func (c *Controller) InventoryPost(writer http.ResponseWriter, req *http.Request) { - // Use the ProcessCORS "decorator" function to reduce code repetition - response := utilities.GetHTTPResponseTemplate() // Read request body body := make([]byte, req.ContentLength) if _, err := io.ReadFull(req.Body, body); err != nil { c.lc.Errorf("Failed to process the posted inventory item(s): %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Failed to process the posted inventory item(s): "+err.Error(), true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Failed to process the posted inventory item(s): " + err.Error())) return } @@ -109,17 +126,25 @@ func (c *Controller) InventoryPost(writer http.ResponseWriter, req *http.Request err := json.Unmarshal(body, &deltaInventoryList) if err != nil { c.lc.Errorf("Failed to process the posted inventory item(s): %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Failed to process the posted inventory item(s): "+err.Error(), true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Failed to process the posted inventory item(s): " + err.Error())) return } // load the inventory.json file var inventoryItems Products - err = utilities.LoadFromJSONFile(c.inventoryFileName, &inventoryItems) + data, err := os.ReadFile(c.inventoryFileName) if err != nil { - c.lc.Errorf("Failed to retrieve all inventory items: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to retrieve all inventory items: "+err.Error(), true) - return + errMsg := fmt.Sprintf("failed to read from inventory items JSON file: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + } + if err = json.Unmarshal(data, &inventoryItems); err != nil { + errMsg := fmt.Sprintf("failed to unmarshal inventory items from JSON file: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) } // Keep track of the items that get added so that the user can be informed of them in our response @@ -179,7 +204,7 @@ func (c *Controller) InventoryPost(writer http.ResponseWriter, req *http.Request inventoryItems.Data[i].UpdatedAt = time.Now().UnixNano() inventoryChanged = true newInventoryItems = append(newInventoryItems, inventoryItems.Data[i]) - response.SetStringHTTPResponseFields(http.StatusOK, "Updated inventory", false) + writer.Write([]byte("Updated inventory")) } } if !postedInventoryItemFound { @@ -237,42 +262,48 @@ func (c *Controller) InventoryPost(writer http.ResponseWriter, req *http.Request inventoryItems.Data = append(inventoryItems.Data, newProduct) inventoryChanged = true newInventoryItems = append(newInventoryItems, newProduct) - response.SetStringHTTPResponseFields(http.StatusOK, "Updated inventory", false) + writer.Write([]byte("Updated inventory")) } } if inventoryChanged { // Write the updated audit log to the audit log json file - err = utilities.WriteToJSONFile(c.inventoryFileName, inventoryItems, 0644) + inventoryData, err := json.Marshal(inventoryItems) if err != nil { + errMsg := fmt.Sprintf("failed to marshal inventory data: %s", err.Error()) + c.lc.Errorf(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + return + } + if err = os.WriteFile(c.inventoryFileName, inventoryData, 0644); err != nil { c.lc.Errorf("Failed to write inventory: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to write inventory: "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to write inventory: " + err.Error())) return } // return the new/updated items as JSON, or if for some reason it cannot be processed back into // JSON for returning to the user, fallback to a simple string - newInventoryItemsJSON, err := utilities.GetAsJSON(newInventoryItems) + newInventoryItemsJSON, err := json.Marshal(newInventoryItems) if err != nil { c.lc.Info("Updated inventory successfully") - response.SetStringHTTPResponseFields(http.StatusOK, "Updated inventory successfully", false) + writer.Write([]byte("Updated inventory successfully")) } else { c.lc.Infof("Updated inventory successfully: %s", newInventoryItemsJSON) - response.SetJSONHTTPResponseFields(http.StatusOK, newInventoryItemsJSON, false) + writer.Write(newInventoryItemsJSON) } } - response.WriteHTTPResponse(writer, req) } // AuditLogPost allows for a new audit log entry to be added func (c *Controller) AuditLogPost(writer http.ResponseWriter, req *http.Request) { - // Use the ProcessCORS "decorator" function to reduce code repetition - response := utilities.GetHTTPResponseTemplate() // Read request body body := make([]byte, req.ContentLength) if _, err := io.ReadFull(req.Body, body); err != nil { c.lc.Errorf("Failed to process the posted audit log entry: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Failed to process the posted audit log entry: "+err.Error(), true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Failed to process the posted audit log entry: " + err.Error())) return } @@ -281,7 +312,8 @@ func (c *Controller) AuditLogPost(writer http.ResponseWriter, req *http.Request) err := json.Unmarshal(body, &postedAuditLogEntry) if err != nil { c.lc.Errorf("Failed to process the posted audit log entry: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Failed to process the posted audit log entry: "+err.Error(), true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Failed to process the posted audit log entry: " + err.Error())) return } @@ -289,12 +321,13 @@ func (c *Controller) AuditLogPost(writer http.ResponseWriter, req *http.Request) // and reject it if it has if postedAuditLogEntry.AuditEntryID != "" { c.lc.Error("The posted audit log entry is not defined") - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "The submitted audit log entry must not have an auditEntryId defined.", true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("The submitted audit log entry must not have an auditEntryId defined.")) return } // assign a new UUID to our new audit log entry - postedAuditLogEntry.AuditEntryID = utilities.GenUUID() + postedAuditLogEntry.AuditEntryID = uuid.New().String() // assign the CreatedAt value to right now, if the user hasn't passed it if postedAuditLogEntry.CreatedAt == 0 { @@ -302,11 +335,20 @@ func (c *Controller) AuditLogPost(writer http.ResponseWriter, req *http.Request) } // load the auditlog.json file - var auditLog AuditLog - err = utilities.LoadFromJSONFile(c.auditLogFileName, &auditLog) + data, err := os.ReadFile(c.auditLogFileName) if err != nil { - c.lc.Errorf("Failed to retrieve all audit log entries: %s", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to retrieve all audit log entries: "+err.Error(), true) + errMsg := fmt.Sprintf("failed to read from cards JSON file: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + return + } + var auditLog AuditLog + if err = json.Unmarshal(data, &auditLog); err != nil { + errMsg := fmt.Sprintf("failed to unmarshal cards from JSON file: %s", err.Error()) + c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } @@ -319,35 +361,43 @@ func (c *Controller) AuditLogPost(writer http.ResponseWriter, req *http.Request) if postedAuditLogEntry.AuditEntryID == auditLogEntry.AuditEntryID { foundEntry = true c.lc.Errorf("Failed to process the requested audit log entry: %s", postedAuditLogEntry.AuditEntryID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to process the requested audit log entry "+postedAuditLogEntry.AuditEntryID+" as it already exists", true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to process the requested audit log entry " + postedAuditLogEntry.AuditEntryID + " as it already exists")) break } } // Happy path // If we haven't found any conflicting UUID's and there have been no errors, // proceed to update the list - if !foundEntry && !response.Error { + if !foundEntry { // write the result auditLog.Data = append(auditLog.Data, postedAuditLogEntry) - err = utilities.WriteToJSONFile(c.auditLogFileName, auditLog, 0644) + auditLogData, err := json.Marshal(auditLog) if err != nil { - c.lc.Errorf("Failed to write the audit log entry: %s : %s", postedAuditLogEntry.AuditEntryID, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to write the audit log entry "+postedAuditLogEntry.AuditEntryID+": "+err.Error(), true) + errMsg := fmt.Sprintf("failed to marshal audit log: %s", err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + return + } + if err = os.WriteFile(c.auditLogFileName, auditLogData, 0644); err != nil { + errMsg := fmt.Sprintf("failed to write audit log data to file: %s", err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } // return the posted audit log entry to the user once added - result, err := utilities.GetAsJSON(postedAuditLogEntry) + result, err := json.Marshal(postedAuditLogEntry) if err != nil { c.lc.Errorf("Failed to return the requested audit log entry to the user: %s : %s", postedAuditLogEntry.AuditEntryID, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, "Failed to return the requested audit log entry to the user "+postedAuditLogEntry.AuditEntryID+": "+err.Error(), true) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte("Failed to return the requested audit log entry to the user " + postedAuditLogEntry.AuditEntryID + ": " + err.Error())) return } // Happy path HTTP response c.lc.Infof("Successfully added new entry to audit log: %s", postedAuditLogEntry.AuditEntryID) - response.SetJSONHTTPResponseFields(http.StatusOK, result, false) + writer.Write(result) } - response.WriteHTTPResponse(writer, req) } diff --git a/ms-inventory/routes/sets_test.go b/ms-inventory/routes/sets_test.go index 5f4f603..76fdaa5 100644 --- a/ms-inventory/routes/sets_test.go +++ b/ms-inventory/routes/sets_test.go @@ -1,17 +1,16 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( "bytes" - "io/ioutil" "net/http" "net/http/httptest" "os" "testing" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/require" ) @@ -51,7 +50,7 @@ func TestInventoryPost(t *testing.T) { require.NoError(t, err) if currentTest.BadInventory { - err := ioutil.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteInventory() @@ -116,7 +115,7 @@ func TestAuditLogPost(t *testing.T) { require.NoError(t, err) if currentTest.BadAuditLog { - err := ioutil.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.auditLogFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteAuditLog() @@ -212,7 +211,7 @@ func TestDeltaInventorySKUPost(t *testing.T) { require.NoError(t, err) if currentTest.BadInventory { - err := ioutil.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) + err := os.WriteFile(c.inventoryFileName, []byte("invalid json test"), 0644) require.NoError(t, err) } else { err := c.WriteInventory() diff --git a/ms-ledger/.golangci.yml b/ms-ledger/.golangci.yml index 61af441..efc6e80 100644 --- a/ms-ledger/.golangci.yml +++ b/ms-ledger/.golangci.yml @@ -1,4 +1,4 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2022-2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause run: diff --git a/ms-ledger/Dockerfile b/ms-ledger/Dockerfile index ee19c70..203ee43 100644 --- a/ms-ledger/Dockerfile +++ b/ms-ledger/Dockerfile @@ -1,14 +1,15 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause -FROM golang:1.18-alpine3.16 AS builder +FROM golang:1.20-alpine3.17 AS builder LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' # add git for go modules -RUN apk update && apk add --no-cache make git gcc libc-dev zeromq-dev linux-headers +# hadolint ignore=DL3018 +RUN apk update && apk add --no-cache make git ENV GO111MODULE=on WORKDIR /usr/local/bin/ @@ -28,13 +29,12 @@ COPY . . RUN make gobuild-ledger # Next image - Copy built Go binary into new workspace -FROM alpine +FROM alpine:3.17 LABEL license='SPDX-License-Identifier: BSD-3-Clause' \ - copyright='Copyright (c) 2022: Intel' + copyright='Copyright (c) 2023: Intel' -RUN apk --no-cache add zeromq -COPY --from=builder /usr/local/bin/ms-ledger/res/configuration.toml /res/configuration.toml +COPY --from=builder /usr/local/bin/ms-ledger/res/configuration.yaml /res/configuration.yaml COPY --from=builder /usr/local/bin/ms-ledger/main /ms-ledger COPY --from=builder /usr/local/bin/ms-ledger/ledger.json /tmp/ledger.json diff --git a/ms-ledger/LICENSE b/ms-ledger/LICENSE index 7bad583..4f84e34 100644 --- a/ms-ledger/LICENSE +++ b/ms-ledger/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright © 2020-2022, Intel Corporation +Copyright © 2020-2023, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/ms-ledger/Makefile b/ms-ledger/Makefile index 0464ed3..afeb4a8 100644 --- a/ms-ledger/Makefile +++ b/ms-ledger/Makefile @@ -1,10 +1,10 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause .PHONY: build gobuild run gorun stop test lint -MICROSERVICE=automated-checkout/ms-ledger +MICROSERVICE=automated-vending/ms-ledger ARCH=$(shell uname -m) @@ -20,7 +20,7 @@ docker: . gobuild-ledger: tidy - CGO_ENABLED=1 GOOS=linux go build -ldflags='-s -w' -a -installsuffix cgo main.go + CGO_ENABLED=0 GOOS=linux go build -ldflags='-s -w' -a main.go run: docker run \ @@ -35,10 +35,10 @@ stop: docker rm -f $(MICROSERVICE):dev test: - go test -tags no_zmq -test.v -cover ./... + go test -test.v -cover ./... testHTML: - go test -tags no_zmq -test.v -coverprofile=test_coverage.out ./... && \ + go test -test.v -coverprofile=test_coverage.out ./... && \ go tool cover -html=test_coverage.out lint: diff --git a/ms-ledger/go.mod b/ms-ledger/go.mod index 518803e..d352dd0 100644 --- a/ms-ledger/go.mod +++ b/ms-ledger/go.mod @@ -1,74 +1,77 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause module ms-ledger -go 1.18 +go 1.20 require ( - github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 - github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 + github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 github.com/gorilla/mux v1.8.0 - github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.4 ) require ( - bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 // indirect - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/armon/go-metrics v0.3.10 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 // indirect - github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 // indirect + github.com/diegoholiveira/jsonlogic/v3 v3.2.7 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.2 // indirect + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 // indirect + github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 // indirect + github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 // indirect github.com/fatih/color v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.4.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.13.0 // indirect github.com/go-redis/redis/v7 v7.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gomodule/redigo v1.8.8 // indirect + github.com/gomodule/redigo v1.8.9 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/consul/api v1.9.1 // indirect + github.com/hashicorp/consul/api v1.20.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v0.12.0 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/hashicorp/go-hclog v0.14.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/golang-lru v0.5.0 // indirect - github.com/hashicorp/serf v0.9.5 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/leodido/go-urn v1.2.3 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect - github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect - github.com/mitchellh/reflectwalk v1.0.0 // indirect - github.com/pebbe/zmq4 v1.2.7 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/nats-io/nats.go v1.25.0 // indirect + github.com/nats-io/nkeys v0.4.4 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect - github.com/spiffe/go-spiffe/v2 v2.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/spiffe/go-spiffe/v2 v2.1.4 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/errs v1.2.2 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + github.com/zeebo/errs v1.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/ms-ledger/go.sum b/ms-ledger/go.sum index 2521773..937e397 100644 --- a/ms-ledger/go.sum +++ b/ms-ledger/go.sum @@ -1,336 +1,334 @@ -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 h1:N9r8OBSXAgEUfho3SQtZLY8zo6E1OdOMvelvP22aVFc= -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9 h1:NAHCNOHtaaYnBt6pGtdW++xkFHuAavi2G7Y1OFNu17E= -github.com/diegoholiveira/jsonlogic v1.0.1-0.20200220175622-ab7989be08b9/go.mod h1:9STzWAIpeXT1gYFvw0JM+BkyMmPKYv/ztBNgXX4hAOw= -github.com/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= -github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0 h1:C6ev04yPwmGGfqCcE3mScI5eWc8udLOAIoecV2CV2Vg= -github.com/edgexfoundry/app-functions-sdk-go/v2 v2.2.0/go.mod h1:okglOXFO85xwM6bdwB6nMAigOB9wDc24MfcP0/UDYEU= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0 h1:4UVNGRaKbkH5aEhQrto26Q65ydmhZYReRw/6ZNQ5J5E= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.2.0/go.mod h1:JKRxVTC5g1IRoQuT6T7pW6O6XnfjQTZgFjEazPHAHng= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= -github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0 h1:Sfi9jAIgRXZaJQw8Ji6+8//47D+iOyGiXQSNZXhy3HE= -github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0/go.mod h1:jyfVSx7mI3u/o/oo10COxBRBvJ8O/9I3z2xAwPmNt/Q= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0 h1:FdnA7hLq0U8PeMAIuJXt4KcXLAyGo7OjckzxTAwaoBc= -github.com/edgexfoundry/go-mod-messaging/v2 v2.2.0/go.mod h1:+X6C0h8ZTJe+lLU2AGJfiAzCJK3zL+yM6cej9VC+79E= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= -github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0 h1:Rqr1CgBXppAeehCkPAHQ6hjyLlm2KTR4IKiKpExm7gg= -github.com/edgexfoundry/go-mod-secrets/v2 v2.2.0/go.mod h1:dQiOiga0KMGHXqFs4nI+Rp19hQR3gZ+3lDRgI9x5Q7M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7 h1:awX07pFPnlntZzRNBcO4a2Ivxa77NMt+narq/6xcS0E= +github.com/diegoholiveira/jsonlogic/v3 v3.2.7/go.mod h1:9oE8z9G+0OMxOoLHF3fhek3KuqD5CBqM0B6XFL08MSg= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1 h1:EclqSAArZtevlyyJu6TJXjWo6MS7OeQkdD/SOz11r+U= +github.com/edgexfoundry/app-functions-sdk-go/v3 v3.0.1/go.mod h1:sgH/44+BsOXtqFnot5bkbyJlJzISD9jiuudKxgnCgmg= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1 h1:gXVxaZPcRJl2MhCIK/GOXZnQL+21xOUpGDTLTcVCxSk= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.0.1/go.mod h1:Or09TpF5HF3FjlqX3kJEFhBCsTvbHY0Nu28UF0MvB3w= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0 h1:rdk8KMcU8fA6o9MCb0O68bboxZTdLiXTZByNttEtRwE= +github.com/edgexfoundry/go-mod-configuration/v3 v3.0.0/go.mod h1:8RlYm5CPzZgUsfXDWVP1TIeUMhsDNIdRdj1HXdomtOI= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0 h1:xjwCI34DLM31cSl1q9XmYgXS3JqXufQJMgohnLLLDx0= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.0.0/go.mod h1:zzzWGWij6wAqm1go9TLs++TFMIsBqBb1eRnIj4mRxGw= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0 h1:nU37Uo4/kloTMrdqDN9SJuDoXb3FpHaMdwVbHtn9PPk= +github.com/edgexfoundry/go-mod-messaging/v3 v3.0.0/go.mod h1:x2CueD9gn/CmtCvDNFgrgBnR+B1iWJMSrC5+gesfDJ0= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0 h1:6LXGElSScCCQzNpR3WjcgVz0RUc9GbfxETvif/4++iI= +github.com/edgexfoundry/go-mod-registry/v3 v3.0.0/go.mod h1:SGyo4fAHzOhDAd2Usa9RaBT/sOzkbceIqLrDG0+iYy8= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1 h1:XyoDjeeVBMNwlJb6ljcTOl1QOp5gabcJc7pYSPYKNPA= +github.com/edgexfoundry/go-mod-secrets/v3 v3.0.1/go.mod h1:Ts9l+TknRKaqFsXmrTuKyV1Y5qIr+eiexVYkQuXnfxk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88= github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.13.0 h1:cFRQdfaSMCOSfGCCLB20MHvuoHb/s5G8L5pu2ppK5AQ= +github.com/go-playground/validator/v10 v10.13.0/go.mod h1:dwu7+CG8/CtBiJFZDz4e+5Upb6OLw04gtBYw0mcG/z4= github.com/go-redis/redis/v7 v7.3.0 h1:3oHqd0W7f/VLKBxeYTEpqdMUsmMectngjM9OtoRoIgg= github.com/go-redis/redis/v7 v7.3.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomodule/redigo v1.8.8 h1:f6cXq6RRfiyrOJEV7p3JhLDlmawGBVBBP1MggY8Mo4E= -github.com/gomodule/redigo v1.8.8/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= +github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws= +github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/consul/api v1.9.1 h1:SngrdG2L62qqLsUz85qcPhFZ78rPf8tcD5qjMgs6MME= -github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0 h1:t7sYxdPJZ2wjZgFpD+B+rx1Jk//5hkiEDW2ptwjhXAc= -github.com/intel-iot-devkit/automated-checkout-utilities v1.0.0/go.mod h1:ov2jYqRbWFWuzgUGt6+LMiE+SBkUpI+qzgIWCipFlCo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= +github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 h1:DcITQwl3ymmg7i1XfwpZFs/TPv2PuTwxE8bnuKVtKlk= github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54/go.mod h1:dIfpPVUR+ZfkzkDcKnn+oPW1jKeXe4WlNWc7rIXOVxM= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= +github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= +github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE= +github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg= +github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= +github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pebbe/zmq4 v1.2.7 h1:6EaX83hdFSRUEhgzSW1E/SPoTS3JeYZgYkBvwdcrA9A= -github.com/pebbe/zmq4 v1.2.7/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/spiffe/go-spiffe/v2 v2.0.0 h1:y6N7BZAxgaFZYELyrIdxSMm2e2tWpzgQewUts9h1hfM= -github.com/spiffe/go-spiffe/v2 v2.0.0/go.mod h1:TEfgrEcyFhuSuvqohJt6IxENUNeHfndWCCV1EX7UaVk= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spiffe/go-spiffe/v2 v2.1.4 h1:Z31Ycaf2Z5DF38sQGmp+iGKjBhBlSzfAq68bfy67Mxw= +github.com/spiffe/go-spiffe/v2 v2.1.4/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= -github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/ms-ledger/main.go b/ms-ledger/main.go index 64fba8a..849dac1 100644 --- a/ms-ledger/main.go +++ b/ms-ledger/main.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package main @@ -8,7 +8,7 @@ import ( "net/url" "os" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg" ) const ( @@ -52,15 +52,15 @@ func main() { os.Exit(1) } - controller := routes.NewController(lc, service, inventoryEndpoint,ledgerFileName) + controller := routes.NewController(lc, service, inventoryEndpoint, ledgerFileName) err = controller.AddAllRoutes() if err != nil { lc.Errorf("failed to add all Routes: %s", err.Error()) os.Exit(1) } - if err := service.MakeItRun(); err != nil { - lc.Errorf("MakeItRun returned error: %s", err.Error()) + if err := service.Run(); err != nil { + lc.Errorf("Run returned error: %s", err.Error()) os.Exit(1) } diff --git a/ms-ledger/res/configuration.toml b/ms-ledger/res/configuration.toml deleted file mode 100644 index 094f880..0000000 --- a/ms-ledger/res/configuration.toml +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - - -[Writable] -LogLevel = 'INFO' - -[Service] -ClientMonitor = '15s' -HealthCheckInterval = '10s' -Host = 'localhost' -Port = 48093 -ReadMaxLimit = 100 -StartupMsg = 'This microservice exposes a CRUD interface for financial transactions in a ledger' -RequestTimeout = '30s' -MaxRequestSize = 0 - -[Registry] -Host = "localhost" -Port = 8500 -Type = 'consul' - -[Trigger] -Type="http" - -[ApplicationSettings] -InventoryEndpoint = "http://localhost:48095/inventory" -LedgerFileName = "/tmp/ledger.json" diff --git a/ms-ledger/res/configuration.yaml b/ms-ledger/res/configuration.yaml new file mode 100644 index 0000000..de8ddf8 --- /dev/null +++ b/ms-ledger/res/configuration.yaml @@ -0,0 +1,17 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +Writable: + LogLevel: INFO + +Service: + Host: localhost + Port: 48093 + StartupMsg: This microservice exposes a CRUD interface for financial transactions in a ledger + +Trigger: + Type: http + +ApplicationSettings: + InventoryEndpoint: http://localhost:48095/inventory + LedgerFileName: /tmp/ledger.json \ No newline at end of file diff --git a/ms-ledger/routes/common.go b/ms-ledger/routes/common.go index c36589a..8e4e928 100644 --- a/ms-ledger/routes/common.go +++ b/ms-ledger/routes/common.go @@ -1,19 +1,19 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( "bytes" + "encoding/json" "errors" "fmt" "net/http" + "os" "time" - - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) -const( +const ( connectionTimeout = 15 ) @@ -21,21 +21,30 @@ const( func (c *Controller) GetAllLedgers() (Accounts, error) { var accountLedgers Accounts - err := utilities.LoadFromJSONFile(c.ledgerFileName, &accountLedgers) + data, err := os.ReadFile(c.ledgerFileName) if err != nil { - return Accounts{}, errors.New( - "Failed to load ledger JSON file: " + err.Error(), - ) + return Accounts{}, errors.New("failed to load ledger JSON file: " + err.Error()) + } + + if err = json.Unmarshal(data, &accountLedgers); err != nil { + return Accounts{}, errors.New("Failed to unmarshal ledger JSON file: " + err.Error()) } return accountLedgers, nil } // DeleteAllLedgers will reset the content of the inventory JSON file func (c *Controller) DeleteAllLedgers() error { - return utilities.WriteToJSONFile(c.ledgerFileName, Accounts{Data: []Account{}}, 0644) + data, err := json.Marshal(Accounts{Data: []Account{}}) + if err != nil { + return errors.New("failed to marshal ledger JSON file for delete: " + err.Error()) + } + if err = os.WriteFile(c.ledgerFileName, data, 0644); err != nil { + return errors.New("failed to write ledger JSON file for delete: " + err.Error()) + } + + return nil } -// TODO: refactor this into the utilities package func (c *Controller) sendCommand(method string, commandURL string, inputBytes []byte) (*http.Response, error) { // Create the http request based on the parameters request, _ := http.NewRequest(method, commandURL, bytes.NewBuffer(inputBytes)) diff --git a/ms-ledger/routes/common_test.go b/ms-ledger/routes/common_test.go index cbc721c..251ec0e 100644 --- a/ms-ledger/routes/common_test.go +++ b/ms-ledger/routes/common_test.go @@ -1,17 +1,17 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "os" "testing" "github.com/stretchr/testify/mock" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/require" ) @@ -69,8 +69,11 @@ func TestGetAllLedgers(t *testing.T) { accountLedgers := getDefaultAccountLedgers() // Write the ledger - err := utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) require.NoError(err) + err = os.WriteFile(c.ledgerFileName, data, 0644) + require.NoError(err) + defer func() { os.Remove(c.ledgerFileName) }() @@ -104,7 +107,9 @@ func TestDeleteAllLedgers(t *testing.T) { expectedLedger := Accounts{Data: []Account{}} // Write the ledger - err := utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) + require.NoError(err) + err = os.WriteFile(c.ledgerFileName, data, 0644) require.NoError(err) defer func() { os.Remove(c.ledgerFileName) diff --git a/ms-ledger/routes/controller.go b/ms-ledger/routes/controller.go index 3134d03..1abacb5 100644 --- a/ms-ledger/routes/controller.go +++ b/ms-ledger/routes/controller.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -6,8 +6,8 @@ package routes import ( "fmt" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" ) type Controller struct { diff --git a/ms-ledger/routes/controller_test.go b/ms-ledger/routes/controller_test.go index 6198f8b..dc1d993 100644 --- a/ms-ledger/routes/controller_test.go +++ b/ms-ledger/routes/controller_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -7,8 +7,8 @@ import ( "fmt" "testing" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) diff --git a/ms-ledger/routes/deletes.go b/ms-ledger/routes/deletes.go index 0531b3b..3d40966 100644 --- a/ms-ledger/routes/deletes.go +++ b/ms-ledger/routes/deletes.go @@ -1,15 +1,16 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "fmt" "net/http" + "os" "strconv" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) // LedgerDelete will delete a specific ledger for an account @@ -19,8 +20,9 @@ func (c *Controller) LedgerDelete(writer http.ResponseWriter, req *http.Request) accountLedgers, err := c.GetAllLedgers() if err != nil { errMsg := fmt.Sprintf("failed to retrieve all ledgers for accounts: %v", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } @@ -30,8 +32,9 @@ func (c *Controller) LedgerDelete(writer http.ResponseWriter, req *http.Request) tid, tiderr := strconv.ParseInt(tidstr, 10, 64) if tiderr != nil { errMsg := "transactionID contains bad data" - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Error("%s: %s", errMsg, tiderr.Error()) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } @@ -39,8 +42,9 @@ func (c *Controller) LedgerDelete(writer http.ResponseWriter, req *http.Request) accountID, accountIDerr := strconv.Atoi(accountIDstr) if accountIDerr != nil { errMsg := "accountID contains bad data" - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Error("%s: %s", errMsg, accountIDerr.Error()) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } @@ -52,28 +56,39 @@ func (c *Controller) LedgerDelete(writer http.ResponseWriter, req *http.Request) if tid == ledger.TransactionID { accountLedgers.Data[accountIndex].Ledgers = append(account.Ledgers[:ledgerIndex], account.Ledgers[ledgerIndex+1:]...) - err := utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) if err != nil { - errMsg := "Failed to update ledger with deleted transaction" - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) + errMsg := "marshal failed for update ledger with deleted transaction" c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + return + } + + if err = os.WriteFile(c.ledgerFileName, data, 0644); err != nil { + errMsg := "write failed for update ledger with deleted transaction" + c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } - utilities.WriteStringHTTPResponse(writer, req, http.StatusOK, "Deleted ledger "+tidstr, false) c.lc.Info("Deleted ledger successfully") + writer.Write([]byte("Deleted ledger " + tidstr)) return } } errMsg := fmt.Sprintf("Could not find Transaction %v", strconv.FormatInt(tid, 10)) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Errorf(errMsg) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } } errMsg := fmt.Sprintf("Could not find account %v", strconv.Itoa(accountID)) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Errorf(errMsg) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } } diff --git a/ms-ledger/routes/deletes_test.go b/ms-ledger/routes/deletes_test.go index 92f86da..c9f7cbf 100644 --- a/ms-ledger/routes/deletes_test.go +++ b/ms-ledger/routes/deletes_test.go @@ -1,11 +1,11 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( "bytes" - "io/ioutil" + "encoding/json" "net/http" "net/http/httptest" "os" @@ -13,10 +13,9 @@ import ( "github.com/stretchr/testify/mock" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -66,9 +65,13 @@ func TestLedgerDelete(t *testing.T) { require.NoError(err) if currentTest.InvalidLedger { - err = ioutil.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) + err = os.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) } else { - err = utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) + require.NoError(err) + + err = os.WriteFile(c.ledgerFileName, data, 0644) + require.NoError(err) } require.NoError(err) defer func() { diff --git a/ms-ledger/routes/gets.go b/ms-ledger/routes/gets.go index 9db25d8..0dca2c4 100644 --- a/ms-ledger/routes/gets.go +++ b/ms-ledger/routes/gets.go @@ -1,15 +1,15 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( + "encoding/json" "fmt" "net/http" "strconv" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) // LedgerAccountGet will get the transaction ledger for a specific account @@ -18,8 +18,9 @@ func (c *Controller) LedgerAccountGet(writer http.ResponseWriter, req *http.Requ accountLedgers, err := c.GetAllLedgers() if err != nil { errMsg := fmt.Sprintf("Failed to retrieve all ledgers for accounts %v", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } @@ -29,29 +30,32 @@ func (c *Controller) LedgerAccountGet(writer http.ResponseWriter, req *http.Requ accountID, err := strconv.Atoi(accountIDstr) if err != nil { errMsg := fmt.Sprintf("AccountID is invalid %v", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } if accountID >= 0 { for _, account := range accountLedgers.Data { if accountID == account.AccountID { - accountLedger, err := utilities.GetAsJSON(account) + accountLedger, err := json.Marshal(account) if err != nil { errMsg := fmt.Sprintf("Failed to retrieve account ledger %v", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, accountLedger, false) c.lc.Info("GET ledger account successfully") + writer.Write(accountLedger) return } } errMsg := fmt.Sprintf("AccountID %v not found in ledger", accountID) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, false) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } } @@ -62,20 +66,22 @@ func (c *Controller) AllAccountsGet(writer http.ResponseWriter, req *http.Reques accountLedgers, err := c.GetAllLedgers() if err != nil { errMsg := fmt.Sprintf("Failed to retrieve all ledgers for accounts %v", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } // No logic needs to be done here, since we are just reading the file // and writing it back out. Simply marshaling it will validate its structure - accountLedgersJSON, err := utilities.GetAsJSON(accountLedgers) + accountLedgersJSON, err := json.Marshal(accountLedgers) if err != nil { errMsg := "Failed to unmarshal accountLedgers" - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } - utilities.WriteJSONHTTPResponse(writer, req, http.StatusOK, accountLedgersJSON, false) c.lc.Info("GET ALL ledger accounts successfully") + writer.Write(accountLedgersJSON) } diff --git a/ms-ledger/routes/gets_test.go b/ms-ledger/routes/gets_test.go index c2c8246..d66ad47 100644 --- a/ms-ledger/routes/gets_test.go +++ b/ms-ledger/routes/gets_test.go @@ -1,10 +1,10 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes import ( - "io/ioutil" + "encoding/json" "net/http" "net/http/httptest" "os" @@ -13,18 +13,14 @@ import ( "github.com/stretchr/testify/mock" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/gorilla/mux" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestAllAccountsGet(t *testing.T) { - // Use community-recommended shorthand (known name clash) - require := require.New(t) - // Accounts slice accountLedgers := getDefaultAccountLedgers() @@ -50,13 +46,16 @@ func TestAllAccountsGet(t *testing.T) { ledgerFileName: LedgerFileName, } err := c.DeleteAllLedgers() - require.NoError(err) + require.NoError(t, err) if currentTest.InvalidLedger { - err = ioutil.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) + err = os.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) } else { - err = utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) + require.NoError(t, err) + err = os.WriteFile(c.ledgerFileName, data, 0644) + require.NoError(t, err) } - require.NoError(err) + require.NoError(t, err) defer func() { os.Remove(c.ledgerFileName) }() @@ -73,9 +72,6 @@ func TestAllAccountsGet(t *testing.T) { } func TestLedgerAccountGet(t *testing.T) { - // Use community-recommended shorthand (known name clash) - require := require.New(t) - // Accounts slice accountLedgers := getDefaultAccountLedgers() invalidAccountID := "0" @@ -105,13 +101,16 @@ func TestLedgerAccountGet(t *testing.T) { ledgerFileName: LedgerFileName, } err := c.DeleteAllLedgers() - require.NoError(err) + require.NoError(t, err) if currentTest.InvalidLedger { - err = ioutil.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) + err = os.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) } else { - err = utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) + require.NoError(t, err) + err = os.WriteFile(c.ledgerFileName, data, 0644) + require.NoError(t, err) } - require.NoError(err) + require.NoError(t, err) defer func() { os.Remove(c.ledgerFileName) }() diff --git a/ms-ledger/routes/models.go b/ms-ledger/routes/models.go index 8e80352..f42b476 100644 --- a/ms-ledger/routes/models.go +++ b/ms-ledger/routes/models.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes diff --git a/ms-ledger/routes/sets.go b/ms-ledger/routes/sets.go index 98735fc..a2b811d 100644 --- a/ms-ledger/routes/sets.go +++ b/ms-ledger/routes/sets.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -7,13 +7,11 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "math" "net/http" + "os" "strconv" "time" - - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" ) // SetPaymentStatus sets the `isPaid` field for a transaction to true/false @@ -23,8 +21,9 @@ func (c *Controller) SetPaymentStatus(writer http.ResponseWriter, req *http.Requ _, err := io.ReadFull(req.Body, body) if err != nil { errMsg := "Failed to parse request body" - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } @@ -32,8 +31,9 @@ func (c *Controller) SetPaymentStatus(writer http.ResponseWriter, req *http.Requ var paymentStatus paymentInfo if err := json.Unmarshal(body, &paymentStatus); err != nil { errMsg := "Failed to unmarshal body" - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } @@ -41,8 +41,9 @@ func (c *Controller) SetPaymentStatus(writer http.ResponseWriter, req *http.Requ accountLedgers, err := c.GetAllLedgers() if err != nil { errMsg := fmt.Sprintf("Failed to retrieve all ledgers for accounts: %v", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } @@ -52,41 +53,52 @@ func (c *Controller) SetPaymentStatus(writer http.ResponseWriter, req *http.Requ if paymentStatus.TransactionID == transaction.TransactionID { accountLedgers.Data[accountIndex].Ledgers[transactionIndex].IsPaid = paymentStatus.IsPaid - err := utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) if err != nil { - errMsg := "Failed to update ledger" - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) + errMsg := fmt.Sprintf("failed to marshal ledger JSON file for set: " + err.Error()) + c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + return + } + if err = os.WriteFile(c.ledgerFileName, data, 0644); err != nil { + errMsg := fmt.Sprintf("failed to write ledger JSON file for set: " + err.Error()) c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } - errMsg := fmt.Sprintf("Updated Payment Status for transaction %v", strconv.FormatInt(paymentStatus.TransactionID, 10)) - utilities.WriteStringHTTPResponse(writer, req, http.StatusOK, errMsg, false) - c.lc.Info(errMsg) + infoMsg := fmt.Sprintf("Updated Payment Status for transaction %v", strconv.FormatInt(paymentStatus.TransactionID, 10)) + c.lc.Info(infoMsg) + writer.WriteHeader(http.StatusOK) + writer.Write([]byte(infoMsg)) return } } errMsg := fmt.Sprintf("Could not find Transaction %v", strconv.FormatInt(paymentStatus.TransactionID, 10)) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } } errMsg := fmt.Sprintf("Could not find account %v", strconv.Itoa(paymentStatus.AccountID)) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) } // LedgerAddTransaction adds a new transaction to the Account Ledger func (c *Controller) LedgerAddTransaction(writer http.ResponseWriter, req *http.Request) { - response := utilities.GetHTTPResponseTemplate() // Read request body (this is the inference data) body := make([]byte, req.ContentLength) _, err := io.ReadFull(req.Body, body) if err != nil { errMsg := "Failed to parse request body" - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) c.lc.Errorf("%s: %s", errMsg, err.Error()) return } @@ -96,8 +108,9 @@ func (c *Controller) LedgerAddTransaction(writer http.ResponseWriter, req *http. var updateLedger deltaLedger if err := json.Unmarshal(body, &updateLedger); err != nil { errMsg := "Failed to unmarshal request body" - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } @@ -105,8 +118,9 @@ func (c *Controller) LedgerAddTransaction(writer http.ResponseWriter, req *http. accountLedgers, err := c.GetAllLedgers() if err != nil { errMsg := fmt.Sprintf("Failed to retrieve all ledgers for accounts %v", err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } @@ -129,8 +143,9 @@ func (c *Controller) LedgerAddTransaction(writer http.ResponseWriter, req *http. itemInfo, err := c.getInventoryItemInfo(c.inventoryEndpoint, deltaSKU.SKU) if err != nil { errMsg := fmt.Sprintf("Could not find product Info for %v errir: %v", deltaSKU.SKU, err.Error()) - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, errMsg, true) c.lc.Error(errMsg) + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte(errMsg)) return } newLineItem := LineItem{ @@ -150,30 +165,38 @@ func (c *Controller) LedgerAddTransaction(writer http.ResponseWriter, req *http. } if !ledgerChanged { - utilities.WriteStringHTTPResponse(writer, req, http.StatusBadRequest, "Account not found", true) c.lc.Error("No ledger change in any account") + writer.WriteHeader(http.StatusBadRequest) + writer.Write([]byte("Account not found")) return } - err = utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) if err != nil { - errMsg := "Failed to update ledger" - utilities.WriteStringHTTPResponse(writer, req, http.StatusInternalServerError, errMsg, true) + errMsg := fmt.Sprintf("failed to marshal ledger JSON file for update: " + err.Error()) + c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) + return + } + if err = os.WriteFile(c.ledgerFileName, data, 0644); err != nil { + errMsg := fmt.Sprintf("failed to write ledger JSON file for update: " + err.Error()) c.lc.Errorf("%s: %s", errMsg, err.Error()) + writer.WriteHeader(http.StatusInternalServerError) + writer.Write([]byte(errMsg)) return } // return the new ledger as JSON, or if for some reason it cannot be processed back into // JSON for returning to the user, fallback to a simple string - newLedgerJSON, err := utilities.GetAsJSON(newLedger) + newLedgerJSON, err := json.Marshal(newLedger) if err != nil { - response.SetStringHTTPResponseFields(http.StatusOK, "Updated ledger successfully", false) c.lc.Warnf("Updated ledger successfully with error %s", err.Error()) + writer.Write([]byte("Updated ledger successfully, but could not marshal to json")) } else { - response.SetJSONHTTPResponseFields(http.StatusOK, newLedgerJSON, false) c.lc.Infof("Updated ledger %s successfully", newLedgerJSON) + writer.Write(newLedgerJSON) } - response.WriteHTTPResponse(writer, req) } // getInventoryItemInfo is a helper function that will take the inference data (SKU) @@ -188,27 +211,14 @@ func (c *Controller) getInventoryItemInfo(inventoryEndpoint string, SKU string) defer resp.Body.Close() // Read the HTTP Response Body - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { return Product{}, fmt.Errorf("Could not read response body from InventoryEndpoint") } - // Prepare to store the http response in this variable - var HTTPResponse utilities.HTTPResponse - - // Unmarshal the http response - err = json.Unmarshal(body, &HTTPResponse) - if err != nil { - return Product{}, fmt.Errorf("Received an invalid data structure from InventoryEndpoint") - } - // Check the HTTP response error condition - if HTTPResponse.Error { - return Product{}, fmt.Errorf("Received an error response from the inventory service: " + HTTPResponse.Content.(string)) - } - // Prepare to unmarshal the desired inventory item from the HTTP response's body (json) var inventoryItem Product - err = json.Unmarshal([]byte(HTTPResponse.Content.(string)), &inventoryItem) + err = json.Unmarshal(body, &inventoryItem) if err != nil { return Product{}, fmt.Errorf("Received an invalid data structure from InventoryEndpoint") } diff --git a/ms-ledger/routes/sets_test.go b/ms-ledger/routes/sets_test.go index 60d037b..338400f 100644 --- a/ms-ledger/routes/sets_test.go +++ b/ms-ledger/routes/sets_test.go @@ -1,4 +1,4 @@ -// Copyright © 2022 Intel Corporation. All rights reserved. +// Copyright © 2022-2023 Intel Corporation. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause package routes @@ -6,7 +6,6 @@ package routes import ( "bytes" "encoding/json" - "io/ioutil" "net/http" "net/http/httptest" "os" @@ -14,9 +13,8 @@ import ( "github.com/stretchr/testify/mock" - "github.com/edgexfoundry/app-functions-sdk-go/v2/pkg/interfaces/mocks" - "github.com/edgexfoundry/go-mod-core-contracts/v2/clients/logger" - utilities "github.com/intel-iot-devkit/automated-checkout-utilities" + "github.com/edgexfoundry/app-functions-sdk-go/v3/pkg/interfaces/mocks" + "github.com/edgexfoundry/go-mod-core-contracts/v3/clients/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -39,13 +37,6 @@ func newInventoryTestServer(t *testing.T) *httptest.Server { inventoryServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - expectedResponse := utilities.HTTPResponse{ - Content: "", - ContentType: "", - StatusCode: 200, - Error: false, - } - // vars defaultProduct := getDefaultProduct() sku := r.RequestURI @@ -53,9 +44,7 @@ func newInventoryTestServer(t *testing.T) *httptest.Server { if sku == "/"+defaultProduct.SKU { w.WriteHeader(http.StatusOK) jsonProduct, _ := json.Marshal(defaultProduct) - expectedResponse.Content = string(jsonProduct) - jsonResponse, _ := json.Marshal(expectedResponse) - _, err := w.Write(jsonResponse) + _, err := w.Write(jsonProduct) if err != nil { t.Fatal(err.Error()) } @@ -72,8 +61,6 @@ func newInventoryTestServer(t *testing.T) *httptest.Server { } func TestLedgerAddTransaction(t *testing.T) { - // Use community-recommended shorthand (known name clash) - require := require.New(t) // Accounts slice accountLedgers := getDefaultAccountLedgers() @@ -107,13 +94,16 @@ func TestLedgerAddTransaction(t *testing.T) { ledgerFileName: LedgerFileName, } err := c.DeleteAllLedgers() - require.NoError(err) + require.NoError(t, err) if currentTest.InvalidLedger { - err = ioutil.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) + err = os.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) } else { - err = utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) + require.NoError(t, err) + err = os.WriteFile(c.ledgerFileName, data, 0644) + require.NoError(t, err) } - require.NoError(err) + require.NoError(t, err) defer func() { os.Remove(c.ledgerFileName) }() @@ -187,8 +177,6 @@ func TestGetInventoryItemInfo(t *testing.T) { } func TestSetPaymentStatus(t *testing.T) { - // Use community-recommended shorthand (known name clash) - require := require.New(t) // Accounts slice accountLedgers := getDefaultAccountLedgers() @@ -218,13 +206,16 @@ func TestSetPaymentStatus(t *testing.T) { ledgerFileName: LedgerFileName, } err := c.DeleteAllLedgers() - require.NoError(err) + require.NoError(t, err) if currentTest.InvalidLedger { - err = ioutil.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) + err = os.WriteFile(c.ledgerFileName, []byte("invalid json test"), 0644) } else { - err = utilities.WriteToJSONFile(c.ledgerFileName, &accountLedgers, 0644) + data, err := json.Marshal(accountLedgers) + require.NoError(t, err) + err = os.WriteFile(c.ledgerFileName, data, 0644) + require.NoError(t, err) } - require.NoError(err) + require.NoError(t, err) defer func() { os.Remove(c.ledgerFileName) }() diff --git a/res/device-mqtt/configuration.toml b/res/device-mqtt/configuration.toml deleted file mode 100644 index c560e18..0000000 --- a/res/device-mqtt/configuration.toml +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -MaxEventSize = 0 # value 0 unlimit the maximum event size that can be sent to message bus or core-data - -[Writable] -LogLevel = "INFO" - # InsecureSecrets are required for when Redis is used for message bus - [Writable.InsecureSecrets] - [Writable.InsecureSecrets.DB] - path = "redisdb" - [Writable.InsecureSecrets.DB.Secrets] - username = "" - password = "" - [Writable.InsecureSecrets.MQTT] - path = "credentials" - [Writable.InsecureSecrets.MQTT.Secrets] - username = "" - password = "" - [Writable.Reading] - ReadingUnits = true - -[Service] -HealthCheckInterval = "10s" -Host = "localhost" -Port = 59982 -ServerBindAddr = "" # blank value defaults to Service.Host value -StartupMsg = "device mqtt started" -# MaxRequestSize limit the request body size in byte of put command -MaxRequestSize = 0 # value 0 unlimit the request size. -RequestTimeout = "5s" - -[Registry] -Host = "localhost" -Port = 8500 -Type = "consul" - -[Clients] - [Clients.core-data] - Protocol = "http" - Host = "localhost" - Port = 59880 - - [Clients.core-metadata] - Protocol = "http" - Host = "localhost" - Port = 59881 - -[MessageQueue] -Protocol = "tcp" -Host = "localhost" -Port = 1883 -Type = "mqtt" -AuthMode = "none" -PublishTopicPrefix = "edgex/events/device" # /// will be added to this Publish Topic prefix - [MessageQueue.Optional] - ClientId = "device-mqtt" - Qos = "0" # Quality of Sevice values are 0 (At most once), 1 (At least once) or 2 (Exactly once) - KeepAlive = "10" # Seconds (must be 2 or greater) - Retained = "false" - AutoReconnect = "true" - ConnectTimeout = "5" # Seconds - SkipCertVerify = "false" # Only used if Cert/Key file or Cert/Key PEMblock are specified - -[SecretStore] -Type = "vault" -Host = "localhost" -Port = 8200 -Path = "device-mqtt/" -Protocol = "http" -RootCaCertPath = "" -ServerName = "" -# Uncomment to seed service secrets file -# SecretsFile = "/tmp/edgex/secrets/device-mqtt/secrets.json" -DisableScrubSecretsFile = false -TokenFile = "/tmp/edgex/secrets/device-mqtt/secrets-token.json" - [SecretStore.Authentication] - AuthType = "X-Vault-Token" - [SecretStore.RuntimeTokenProvider] - Enabled = false - Protocol = "https" - Host = "localhost" - Port = 59841 - TrustDomain = "edgexfoundry.org" - EndpointSocket = "/tmp/edgex/secrets/spiffe/public/api.sock" - RequiredSecrets = "redisdb" - -[Device] -DataTransform = true -MaxCmdOps = 128 -MaxCmdValueLen = 256 -ProfilesDir = "./res/profiles" -DevicesDir = "./res/devices" -UpdateLastConnected = false -Labels = [] -EnableAsyncReadings = true -AsyncBufferSize = 16 -UseMessageBus = true - -[MQTTBrokerInfo] -Schema = "tcp" -Host = "localhost" -Port = 1883 -Qos = 0 -KeepAlive = 3600 -ClientId = "device-mqtt-external" - -CredentialsRetryTime = 120 # Seconds -CredentialsRetryWait = 1 # Seconds -ConnEstablishingRetry = 10 -ConnRetryWaitTime = 5 - -# AuthMode is the MQTT broker authentication mechanism. Currently, "none" and "usernamepassword" is the only AuthMode supported by this service, and the secret keys are "username" and "password". -AuthMode = "none" -CredentialsPath = "credentials" - -# Comment out/remove when using multi-level topics -IncomingTopic = "Inference/DataTopic" -ResponseTopic = "Inference/ResponseTopic" -UseTopicLevels = false - -# Uncomment to use multi-level topics -# IncomingTopic = "incoming/data/#" -# ResponseTopic = "command/response/#" -# UseTopicLevels = true - - [MQTTBrokerInfo.Writable] - # ResponseFetchInterval specifies the retry interval(milliseconds) to fetch the command response from the MQTT broker - ResponseFetchInterval = 500 diff --git a/res/device-mqtt/devices/device-list.toml b/res/device-mqtt/devices/device-list.toml deleted file mode 100644 index 3d36f26..0000000 --- a/res/device-mqtt/devices/device-list.toml +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright © 2022 Intel Corporation. All rights reserved. -# SPDX-License-Identifier: BSD-3-Clause - -# Pre-define Devices -[[DeviceList]] - Name = "Inference-device" - ProfileName = "Inference-device-Profile" - Description = "Inference CV Module over MQTT" - Labels = [ "MQTT", "Inference" ] - [DeviceList.Protocols] - [DeviceList.Protocols.mqtt] - CommandTopic = "Inference/CommandTopic" \ No newline at end of file diff --git a/res/device-mqtt/devices/device-list.yaml b/res/device-mqtt/devices/device-list.yaml new file mode 100644 index 0000000..8bb469b --- /dev/null +++ b/res/device-mqtt/devices/device-list.yaml @@ -0,0 +1,14 @@ +# Copyright © 2023 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause + +# Pre-define Devices +deviceList: + - name: Inference-device + profileName: Inference-device-Profile + description: Inference CV Module over MQTT + labels: + - MQTT + - Inference + protocols: + mqtt: + CommandTopic: Inference/CommandTopic \ No newline at end of file diff --git a/res/device-mqtt/profiles/inference-mqtt-device-profile.yml b/res/device-mqtt/profiles/inference-mqtt-device-profile.yml index 597ed76..b1db55e 100644 --- a/res/device-mqtt/profiles/inference-mqtt-device-profile.yml +++ b/res/device-mqtt/profiles/inference-mqtt-device-profile.yml @@ -1,6 +1,6 @@ --- -# Copyright © 2022 Intel Corporation. All rights reserved. +# Copyright © 2023 Intel Corporation. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause name: "Inference-device-Profile" diff --git a/res/mqtt/mosquitto.conf b/res/mqtt/mosquitto.conf deleted file mode 100644 index 4a21b2b..0000000 --- a/res/mqtt/mosquitto.conf +++ /dev/null @@ -1,3 +0,0 @@ -persistence true -persistence_location /mosquitto/data/ -log_dest file /mosquitto/log/mosquitto.log diff --git a/smoke-test.sh b/smoke-test.sh index ee7558d..d0c5b58 100755 --- a/smoke-test.sh +++ b/smoke-test.sh @@ -8,7 +8,7 @@ declare -i timeoutCounter=0 while true ; do echo "Working..." - result=$(curl -X GET http://localhost:48094/status | grep -n '{\\"lock1_status\\":1,\\"lock2_status\\":1,\\"door_closed\\":true') # -n shows line number + result=$(curl -X GET http://localhost:48094/status | grep -n '{\"lock1_status\":1,\"lock2_status\":1,\"door_closed\":true') # -n shows line number echo "timeout value = $timeoutCounter" if [ ! -z $result ] ; then echo "Found correct state!" @@ -34,7 +34,7 @@ do echo $i echo - curl -X PUT -H "Content-Type: application/json" -d "{\"card-number\":\"$i\"}" http://localhost:48098/api/v2/device/name/card-reader/card-number | jq . + curl -X PUT -H "Content-Type: application/json" -d "{\"card-number\":\"$i\"}" http://localhost:48098/api/v3/device/name/card-reader/card-number | jq . echo echo "card read!!!!!!!!!!!!!" sleep 5 @@ -43,7 +43,7 @@ do echo echo "Card status!!!!!!!!!!!!!" # open door - curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed | jq . + curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"0"}' http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed | jq . echo echo "open door!!!!!!!!!!!!!" sleep 4 @@ -51,7 +51,7 @@ do # should show door:false echo echo "open door status!!!!!!!!!!!!!" - curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"1"}' http://localhost:48097/api/v2/device/name/controller-board/setDoorClosed | jq . + curl -X PUT -H "Content-Type: application/json" -d '{"setDoorClosed":"1"}' http://localhost:48097/api/v3/device/name/controller-board/setDoorClosed | jq . echo echo "close door !!!!!!!!!!!!!" sleep 4 @@ -68,6 +68,8 @@ do curl -X GET http://localhost:48093/ledger | jq . echo echo "Get ledger!!!!!!!!!!!!" - sleep 30 + sleep 5 echo "GOING TO NEXT CARD NUMBER" -done \ No newline at end of file +done + +echo "NO MORE CARD NUMBERS. DONE!" \ No newline at end of file