generated from CDCgov/template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor queue reader and start stubbing out polling queue message ha…
…ndler (#82) * Refactor import specific message handling out of QueueHandler * update tests * placeholder for polling message handler and some tidying Co-authored-by: James Herr <jherr@flexion.us> Co-authored-by: jcrichlake <145698165+jcrichlake@users.noreply.github.com> Co-authored-by: pluckyswan <96704946+pluckyswan@users.noreply.github.com> Co-authored-by: saquino0827 <saquino@flexion.us> Co-authored-by: jherrflexion <118225331+jherrflexion@users.noreply.github.com>
- Loading branch information
1 parent
e8ca6ea
commit 15e5814
Showing
7 changed files
with
139 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -136,3 +136,6 @@ local.settings.json | |
__blobstorage__ | ||
__queuestorage__ | ||
__azurite_db*__.json | ||
|
||
# Apple nonsense | ||
.DS_Store |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package orchestration | ||
|
||
import ( | ||
"encoding/base64" | ||
"errors" | ||
"github.com/Azure/azure-sdk-for-go/sdk/messaging/eventgrid/azeventgrid" | ||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azqueue" | ||
"github.com/CDCgov/reportstream-sftp-ingestion/usecases" | ||
"github.com/CDCgov/reportstream-sftp-ingestion/utils" | ||
"log/slog" | ||
) | ||
|
||
type ImportMessageHandler struct { | ||
usecase usecases.ReadAndSend | ||
} | ||
|
||
func NewImportMessageHandler() (ImportMessageHandler, error) { | ||
usecase, err := usecases.NewReadAndSendUsecase() | ||
|
||
if err != nil { | ||
slog.Error("Unable to create Usecase", slog.Any(utils.ErrorKey, err)) | ||
return ImportMessageHandler{}, err | ||
} | ||
|
||
return ImportMessageHandler{usecase: &usecase}, nil | ||
} | ||
|
||
func (receiver ImportMessageHandler) HandleMessageContents(message azqueue.DequeuedMessage) error { | ||
sourceUrl, err := getUrlFromMessage(*message.MessageText) | ||
|
||
if err != nil { | ||
slog.Error("Failed to get the file URL", slog.Any(utils.ErrorKey, err)) | ||
return err | ||
} | ||
|
||
return receiver.usecase.ReadAndSend(sourceUrl) | ||
} | ||
|
||
func getUrlFromMessage(messageText string) (string, error) { | ||
eventBytes, err := base64.StdEncoding.DecodeString(messageText) | ||
if err != nil { | ||
slog.Error("Failed to decode message text", slog.Any(utils.ErrorKey, err)) | ||
return "", err | ||
} | ||
|
||
// Map bytes json to Event object format (shape) | ||
var event azeventgrid.Event | ||
err = event.UnmarshalJSON(eventBytes) | ||
if err != nil { | ||
slog.Error("Failed to unmarshal event", slog.Any(utils.ErrorKey, err)) | ||
return "", err | ||
} | ||
|
||
// Data is an 'any' type. We need to tell Go that it's a map | ||
eventData, ok := event.Data.(map[string]any) | ||
|
||
if !ok { | ||
slog.Error("Could not assert event data to a map", slog.Any("event", event)) | ||
return "", errors.New("could not assert event data to a map") | ||
} | ||
|
||
// Extract blob url from Event's data | ||
eventUrl, ok := eventData["url"].(string) | ||
|
||
if !ok { | ||
slog.Error("Could not assert event data url to a string", slog.Any("event", event)) | ||
return "", errors.New("could not assert event data url to a string") | ||
} | ||
|
||
return eventUrl, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package orchestration | ||
|
||
import ( | ||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azqueue" | ||
) | ||
|
||
type PollingMessageHandler struct { | ||
// TODO - add SFTP handler | ||
} | ||
|
||
func NewPollingMessageHandler() (PollingMessageHandler, error) { | ||
// TODO - add SFTP handler | ||
|
||
return PollingMessageHandler{}, nil | ||
} | ||
|
||
func (receiver PollingMessageHandler) HandleMessageContents(message azqueue.DequeuedMessage) error { | ||
// TODO - use SFTP handler | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.