Merged in feature/jobcollector (pull request #30)

Initial Job Collector (changes pending)

* movearroundtocleancollector

* internalgetfunctions

* completecollectorquery

* simplify

* fixtests

* addvendor

* noplaceholder
This commit is contained in:
Michael McGuinness
2025-01-21 12:28:46 +00:00
parent b888e3450f
commit 4ccb980593
46 changed files with 951 additions and 655 deletions
+9 -9
View File
@@ -6,6 +6,7 @@ import (
controllers "queryorchestration/api/queryRunner"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/job/collector"
"queryorchestration/internal/query/document"
"testing"
@@ -18,9 +19,6 @@ import (
)
func TestQueryRunner(t *testing.T) {
if testing.Short() {
t.Skip("Skipping long test in short mode")
}
ctx := context.Background()
pool, err := pgxmock.NewPool()
@@ -33,7 +31,9 @@ func TestQueryRunner(t *testing.T) {
Pool: pool,
}
svc := document.New(db)
svc := document.New(db, &document.Services{
Collector: collector.New(db),
})
runner := controllers.NewQueryRunner(svc, validator.New())
assert.NotNil(t, runner)
@@ -58,20 +58,20 @@ func TestQueryRunner(t *testing.T) {
qV := int32(1)
pool.ExpectQuery("name: GetCollectorFromJobID :one").WithArgs(database.MustToDBUUID(doc.JobID)).
pool.ExpectQuery("name: GetCollectorByJobID :one").WithArgs(database.MustToDBUUID(doc.JobID)).
WillReturnRows(
pgxmock.NewRows([]string{"id", "jobId", "minCleanVersion", "minTextVersion"}).
AddRow(collectorID, database.MustToDBUUID(doc.JobID), minCleanVersion, minTextVersion),
pgxmock.NewRows([]string{"id", "jobId", "minCleanVersion", "minTextVersion", "activeVersion", "latestVersion", "fields"}).
AddRow(collectorID, database.MustToDBUUID(doc.JobID), minCleanVersion, minTextVersion, int32(1), int32(2), []byte("")),
)
pool.ExpectQuery("name: ListResultsByDocumentID :many").WithArgs(database.MustToDBUUID(doc.ID), minCleanVersion, minTextVersion).
WillReturnRows(
pgxmock.NewRows([]string{"id", "queryId", "queryVersion"}).
AddRow(collectorID, queryID, qV),
)
pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(collectorID).
pool.ExpectQuery("name: ListCollectorQueries :many").WithArgs(collectorID).
WillReturnRows(
pgxmock.NewRows([]string{"collectorId", "queryId", "type", "queryVersion", "requiredIds"}).
AddRow(collectorID, queryID, repository.NullQuerytype{Querytype: repository.QuerytypeContextFull, Valid: true}, &qV, []pgtype.UUID{}),
AddRow(collectorID, queryID, repository.QuerytypeContextFull, qV, []pgtype.UUID{}),
)
err = runner.Process(ctx, msg)
+89 -76
View File
@@ -99,20 +99,47 @@ type IdMessage struct {
// JobCollector JobCollector model.
type JobCollector struct {
// ExampleProperty Example property for JobCollector.
ExampleProperty *string `json:"example_property,omitempty"`
// ActiveVersion The active version of the collector.
ActiveVersion int32 `json:"active_version"`
// Fields The fields in the job collector.
Fields []JobCollectorField `json:"fields"`
// JobId The ID of the associated job.
JobId string `json:"job_id"`
// LatestVersion The latest version of the collector.
LatestVersion int32 `json:"latest_version"`
// MinimumCleanerVersion The minimum version for the document cleaner.
MinimumCleanerVersion int32 `json:"minimum_cleaner_version"`
// MinimumTextVersion The minimum version for the text parser.
MinimumTextVersion int32 `json:"minimum_text_version"`
}
// JobCollectorCreate Payload for creating a JobCollector.
type JobCollectorCreate struct {
// ExampleProperty Example property for JobCollectorCreate.
ExampleProperty *string `json:"example_property,omitempty"`
// JobCollectorField The field properties for the job collector.
type JobCollectorField struct {
// Name The output field name.
Name string `json:"name"`
// QueryId The query id that will populate the result.
QueryId string `json:"query_id"`
}
// JobCollectorUpdate Payload for updating a JobCollector.
type JobCollectorUpdate struct {
// ExampleProperty Example property for JobCollectorUpdate.
ExampleProperty *string `json:"example_property,omitempty"`
// ActiveVersion The active version of the collector.
ActiveVersion *int32 `json:"active_version,omitempty"`
// Fields The fields in the job collector.
Fields *[]JobCollectorField `json:"fields,omitempty"`
// MinimumCleanerVersion The minimum version for the document cleaner.
MinimumCleanerVersion *int32 `json:"minimum_cleaner_version,omitempty"`
// MinimumTextVersion The minimum version for the text parser.
MinimumTextVersion *int32 `json:"minimum_text_version,omitempty"`
}
// ListQueries defines model for ListQueries.
@@ -187,11 +214,8 @@ type QueryUpdate struct {
// TriggerExportJSONRequestBody defines body for TriggerExport for application/json ContentType.
type TriggerExportJSONRequestBody = ExportTrigger
// CreateJobCollectorJSONRequestBody defines body for CreateJobCollector for application/json ContentType.
type CreateJobCollectorJSONRequestBody = JobCollectorCreate
// UpdateJobCollectorJSONRequestBody defines body for UpdateJobCollector for application/json ContentType.
type UpdateJobCollectorJSONRequestBody = JobCollectorUpdate
// UpdateJobCollectorByJobIdJSONRequestBody defines body for UpdateJobCollectorByJobId for application/json ContentType.
type UpdateJobCollectorByJobIdJSONRequestBody = JobCollectorUpdate
// CreateQueryJSONRequestBody defines body for CreateQuery for application/json ContentType.
type CreateQueryJSONRequestBody = QueryCreate
@@ -205,20 +229,17 @@ type TestQueryJSONRequestBody = QueryTestRequest
// ServerInterface represents all server handlers.
type ServerInterface interface {
// Trigger an export
// (POST /export)
// (POST /job/export)
TriggerExport(ctx echo.Context) error
// Check export state.
// (GET /export/{id})
// (GET /job/export/{id})
ExportState(ctx echo.Context, id string) error
// Create a job collector
// (POST /job-collectors)
CreateJobCollector(ctx echo.Context) error
// Get a job collector by ID
// (GET /job-collectors/{id})
GetJobCollectorById(ctx echo.Context, id string) error
// (GET /job/{id}/collector)
GetJobCollectorByJobId(ctx echo.Context, id string) error
// Update a job collector
// (PUT /job-collectors/{id})
UpdateJobCollector(ctx echo.Context, id string) error
// (PATCH /job/{id}/collector)
UpdateJobCollectorByJobId(ctx echo.Context, id string) error
// List queries
// (GET /queries)
ListQueries(ctx echo.Context) error
@@ -269,17 +290,8 @@ func (w *ServerInterfaceWrapper) ExportState(ctx echo.Context) error {
return err
}
// CreateJobCollector converts echo context to params.
func (w *ServerInterfaceWrapper) CreateJobCollector(ctx echo.Context) error {
var err error
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.CreateJobCollector(ctx)
return err
}
// GetJobCollectorById converts echo context to params.
func (w *ServerInterfaceWrapper) GetJobCollectorById(ctx echo.Context) error {
// GetJobCollectorByJobId converts echo context to params.
func (w *ServerInterfaceWrapper) GetJobCollectorByJobId(ctx echo.Context) error {
var err error
// ------------- Path parameter "id" -------------
var id string
@@ -290,12 +302,12 @@ func (w *ServerInterfaceWrapper) GetJobCollectorById(ctx echo.Context) error {
}
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetJobCollectorById(ctx, id)
err = w.Handler.GetJobCollectorByJobId(ctx, id)
return err
}
// UpdateJobCollector converts echo context to params.
func (w *ServerInterfaceWrapper) UpdateJobCollector(ctx echo.Context) error {
// UpdateJobCollectorByJobId converts echo context to params.
func (w *ServerInterfaceWrapper) UpdateJobCollectorByJobId(ctx echo.Context) error {
var err error
// ------------- Path parameter "id" -------------
var id string
@@ -306,7 +318,7 @@ func (w *ServerInterfaceWrapper) UpdateJobCollector(ctx echo.Context) error {
}
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.UpdateJobCollector(ctx, id)
err = w.Handler.UpdateJobCollectorByJobId(ctx, id)
return err
}
@@ -420,11 +432,10 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
Handler: si,
}
router.POST(baseURL+"/export", wrapper.TriggerExport)
router.GET(baseURL+"/export/:id", wrapper.ExportState)
router.POST(baseURL+"/job-collectors", wrapper.CreateJobCollector)
router.GET(baseURL+"/job-collectors/:id", wrapper.GetJobCollectorById)
router.PUT(baseURL+"/job-collectors/:id", wrapper.UpdateJobCollector)
router.POST(baseURL+"/job/export", wrapper.TriggerExport)
router.GET(baseURL+"/job/export/:id", wrapper.ExportState)
router.GET(baseURL+"/job/:id/collector", wrapper.GetJobCollectorByJobId)
router.PATCH(baseURL+"/job/:id/collector", wrapper.UpdateJobCollectorByJobId)
router.GET(baseURL+"/queries", wrapper.ListQueries)
router.POST(baseURL+"/queries", wrapper.CreateQuery)
router.DELETE(baseURL+"/queries/:id", wrapper.DeprecateQuery)
@@ -437,40 +448,42 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
"UleSoTLDcCUS1p6q7L7u/h8AAP//+pSl8AgsAAA=",
}
// GetSwagger returns the content of the embedded swagger specification file
+32 -7
View File
@@ -1,19 +1,44 @@
package queryservice
import (
"fmt"
"net/http"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
)
func (s *Controllers) GetJobCollectorById(ctx echo.Context, id string) error {
return ctx.JSON(http.StatusOK, map[string]string{"status": "export triggered"})
func (s *Controllers) GetJobCollectorByJobId(ctx echo.Context, jobId string) error {
uid, err := uuid.Parse(jobId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Invalid ID")
}
coll, err := s.svc.JobCollector.GetByJobID(ctx.Request().Context(), uid)
if err != nil {
return echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("Unable to get collector: %s", err))
}
fields := make([]JobCollectorField, len(coll.Fields))
index := 0
for name, id := range coll.Fields {
fields[index] = JobCollectorField{
Name: name,
QueryId: id.String(),
}
index++
}
return ctx.JSON(http.StatusOK, JobCollector{
JobId: coll.JobID.String(),
MinimumCleanerVersion: coll.MinCleanVersion,
MinimumTextVersion: coll.MinTextVersion,
ActiveVersion: coll.ActiveVersion,
LatestVersion: coll.LatestVersion,
Fields: fields,
})
}
func (s *Controllers) CreateJobCollector(ctx echo.Context) error {
return ctx.JSON(http.StatusOK, map[string]string{"status": "export triggered"})
}
func (s *Controllers) UpdateJobCollector(ctx echo.Context, id string) error {
func (s *Controllers) UpdateJobCollectorByJobId(ctx echo.Context, jobId string) error {
return ctx.JSON(http.StatusOK, map[string]string{"status": "export triggered"})
}
+46 -20
View File
@@ -1,32 +1,23 @@
package queryservice_test
import (
"encoding/json"
"net/http"
"net/http/httptest"
queryservice "queryorchestration/api/queryService"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/job/collector"
"strings"
"testing"
"github.com/go-playground/validator/v10"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/pashagolub/pgxmock/v3"
"github.com/stretchr/testify/assert"
)
func TestCreateJobCollector(t *testing.T) {
e := echo.New()
req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(""))
rec := httptest.NewRecorder()
ctx := e.NewContext(req, rec)
cons := queryservice.NewControllers(validator.New(), &queryservice.Services{})
err := cons.CreateJobCollector(ctx)
assert.Nil(t, err)
assert.Equal(t, http.StatusOK, rec.Code)
assert.NotEmpty(t, rec.Body.String())
}
func TestUpdateJobCollector(t *testing.T) {
e := echo.New()
req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(""))
@@ -37,24 +28,59 @@ func TestUpdateJobCollector(t *testing.T) {
id := uuid.New()
err := cons.UpdateJobCollector(ctx, id.String())
err := cons.UpdateJobCollectorByJobId(ctx, id.String())
assert.Nil(t, err)
assert.Equal(t, http.StatusOK, rec.Code)
assert.NotEmpty(t, rec.Body.String())
}
func TestGetJobCollector(t *testing.T) {
func TestGetJobCollectorByJobId(t *testing.T) {
pool, err := pgxmock.NewPool()
if err != nil {
t.Fatalf("failed to open pgxmock database: %v", err)
}
queries := repository.New(pool)
db := &database.Connection{
Queries: queries,
Pool: pool,
}
e := echo.New()
req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(""))
rec := httptest.NewRecorder()
ctx := e.NewContext(req, rec)
cons := queryservice.NewControllers(validator.New(), &queryservice.Services{})
svc := collector.New(db)
cons := queryservice.NewControllers(validator.New(), &queryservice.Services{
JobCollector: svc,
})
id := uuid.New()
coll := collector.Collector{
ID: uuid.New(),
JobID: uuid.New(),
MinCleanVersion: int32(1),
MinTextVersion: int32(2),
}
err := cons.GetJobCollectorById(ctx, id.String())
pool.ExpectQuery("name: GetCollectorByJobID :one").WithArgs(database.MustToDBUUID(coll.JobID)).
WillReturnRows(
pgxmock.NewRows([]string{"id", "jobId", "minCleanVersion", "minTextVersion", "activeVersion", "latestVersion", "fields"}).
AddRow(database.MustToDBUUID(coll.ID), database.MustToDBUUID(coll.JobID), coll.MinCleanVersion, coll.MinTextVersion, int32(1), int32(2), []byte("")),
)
err = cons.GetJobCollectorByJobId(ctx, coll.JobID.String())
assert.Nil(t, err)
assert.Equal(t, http.StatusOK, rec.Code)
assert.NotEmpty(t, rec.Body.String())
var res queryservice.JobCollector
err = json.Unmarshal(rec.Body.Bytes(), &res)
assert.Nil(t, err)
assert.EqualExportedValues(t, queryservice.JobCollector{
JobId: coll.JobID.String(),
MinimumCleanerVersion: coll.MinCleanVersion,
MinimumTextVersion: coll.MinTextVersion,
ActiveVersion: int32(1),
LatestVersion: int32(2),
Fields: []queryservice.JobCollectorField{},
}, res)
}