Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions internal/runtime/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ package runtime

import (
"encoding/json"
"github.com/ugorji/go/codec"
"strconv"

"github.com/edgexfoundry/app-functions-sdk-go/appcontext"
"github.com/edgexfoundry/go-mod-core-contracts/clients"
"github.com/edgexfoundry/go-mod-core-contracts/models"
"github.com/edgexfoundry/go-mod-messaging/pkg/types"
"github.com/ugorji/go/codec"

"github.com/edgexfoundry/app-functions-sdk-go/appcontext"
)

// GolangRuntime represents the golang runtime environment
Expand All @@ -49,8 +50,6 @@ func (gr GolangRuntime) ProcessEvent(edgexcontext *appcontext.Context, envelope
edgexcontext.EventId = event.ID

case clients.ContentTypeCBOR:
event := models.Event{}

x := codec.CborHandle{}
err := codec.NewDecoderBytes([]byte(envelope.Payload), &x).Decode(&event)
if err != nil {
Expand Down
55 changes: 25 additions & 30 deletions internal/trigger/http/rest.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,11 @@
package http

import (
"bytes"
"encoding/gob"
"encoding/json"
"github.com/edgexfoundry/go-mod-core-contracts/clients"
"io/ioutil"
"net/http"

"github.com/edgexfoundry/go-mod-core-contracts/clients"
"github.com/edgexfoundry/go-mod-core-contracts/clients/logger"
"github.com/edgexfoundry/go-mod-core-contracts/models"
"github.com/edgexfoundry/go-mod-messaging/pkg/types"

"github.com/edgexfoundry/app-functions-sdk-go/appcontext"
Expand All @@ -42,7 +39,7 @@ type Trigger struct {
Webserver *webserver.WebServer
}

// Initialize ...
// Initialize initializes the Trigger for logging and REST route
func (trigger *Trigger) Initialize(logger logger.LoggingClient) error {
trigger.logging = logger
trigger.logging.Info("Initializing HTTP Trigger")
Expand All @@ -51,34 +48,41 @@ func (trigger *Trigger) Initialize(logger logger.LoggingClient) error {

return nil
}

func (trigger *Trigger) requestHandler(writer http.ResponseWriter, r *http.Request) {
defer r.Body.Close()

var event models.Event
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&event)
contentType := r.Header.Get(clients.ContentType)

if contentType != clients.ContentTypeJSON && contentType != clients.ContentTypeCBOR {
trigger.logging.Debug("HTTP content type not supported", clients.ContentType, contentType)
writer.WriteHeader(http.StatusBadRequest)
return
}

data, err := ioutil.ReadAll(r.Body)
if err != nil {
trigger.logging.Debug("HTTP Body not an Edgex Event")
trigger.logging.Debug("Error reading HTTP Body", "error", err)
writer.WriteHeader(http.StatusBadRequest)
return
}

trigger.logging.Debug("Request Body read", "byte count", len(data))

correlationID := r.Header.Get("X-Correlation-ID")
edgexContext := &appcontext.Context{Configuration: trigger.Configuration,
Trigger: trigger,
LoggingClient: trigger.logging,
CorrelationID: correlationID,
}

trigger.logging.Trace("Received message from http", clients.CorrelationHeader, correlationID)
trigger.logging.Debug("Received message from http", clients.ContentType, contentType)

data, err := json.Marshal(event)
if err != nil {
trigger.logging.Error("Error marshaling data to []byte")
writer.WriteHeader(http.StatusInternalServerError)
return
edgexContext := &appcontext.Context{
Configuration: trigger.Configuration,
Trigger: trigger,
LoggingClient: trigger.logging,
}

envelope := &types.MessageEnvelope{
CorrelationID: edgexContext.CorrelationID,
CorrelationID: correlationID,
ContentType: contentType,
Payload: data,
}

Expand All @@ -91,12 +95,3 @@ func (trigger *Trigger) requestHandler(writer http.ResponseWriter, r *http.Reque

trigger.outputData = nil
}
func getBytes(key interface{}) ([]byte, error) {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
err := enc.Encode(key)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}