From dc9e9485b96ef8eda150aa90b450e8f381e21c99 Mon Sep 17 00:00:00 2001 From: pb Date: Thu, 11 Jul 2024 18:26:40 +0200 Subject: [PATCH] retrieve bookings from API and NATS --- .gitignore | 3 +- go.mod | 6 +++- go.sum | 8 +++++- graph.go | 3 +- models/schedule.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 models/schedule.go diff --git a/.gitignore b/.gitignore index f97aab7..b566f0e 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ go.work __debug_bin argo_workflows/* -*.xml \ No newline at end of file +*.xml +*.txt \ No newline at end of file diff --git a/go.mod b/go.mod index 1263fa1..d0ff358 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/beego/beego v1.12.12 github.com/beego/beego/v2 v2.2.2 github.com/goraz/onion v0.1.3 + github.com/nats-io/nats.go v1.9.1 github.com/nwtgck/go-fakelish v0.1.3 github.com/rs/zerolog v1.33.0 github.com/tidwall/gjson v1.17.1 @@ -24,10 +25,13 @@ require ( github.com/golang/snappy v0.0.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.11.7 // indirect + github.com/klauspost/compress v1.17.2 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/nats-io/jwt v0.3.2 // indirect + github.com/nats-io/nkeys v0.1.3 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.19.0 // indirect github.com/prometheus/client_model v0.5.0 // indirect diff --git a/go.sum b/go.sum index 2696d91..1223f39 100644 --- a/go.sum +++ b/go.sum @@ -247,8 +247,9 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= +github.com/klauspost/compress v1.17.2/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/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -302,11 +303,16 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2 h1:i2Ly0B+1+rzNZHHWtD4ZwKi+OU5l+uQo1iDHZ2PmiIc= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3 h1:6JrEfig+HzTH85yxzhSVbjHRJv9cn0p6n3IngIcM5/k= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +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/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nwtgck/go-fakelish v0.1.3 h1:bA8/xa9hQmzppexIhBvdmztcd/PJ4SPuAUTBdMKZ8G4= diff --git a/graph.go b/graph.go index 1847bb4..8a7689f 100644 --- a/graph.go +++ b/graph.go @@ -5,6 +5,7 @@ import ( "fmt" "maps" "net/url" + "oc-scheduler/daemons" "cloud.o-forge.io/core/oc-catalog/models" @@ -20,7 +21,7 @@ type Graph struct { Datacenters []models.DatacenterModel Storages []models.StorageModel Links map[string]models.Link - ws HttpQuery + ws daemons.HttpQuery } // Create a dictionnaries with each existing workflow from a workspace, associated to the JSON representation of its content diff --git a/models/schedule.go b/models/schedule.go new file mode 100644 index 0000000..8b4467f --- /dev/null +++ b/models/schedule.go @@ -0,0 +1,70 @@ +package models + +import ( + "fmt" + "oc-scheduler/logger" + "sync" + "time" +) + +// Is duration really important ? + +type Booking struct { + Start time.Time + Stop time.Time + Duration uint + Workflow string +} + +type ScheduledBooking struct { + Bookings []Booking + Mu sync.Mutex +} + +func (s Booking) Equals(other Booking) bool { + return s.Workflow == other.Workflow && s.Start == other.Start && s.Stop == other.Stop +} + +func (sb *ScheduledBooking) AddSchedule(new_booking Booking){ + if(!sb.scheduleAlreadyExists(new_booking)){ + sb.Bookings = append(sb.Bookings,new_booking) + logger.Logger.Info().Msg("Updated list schedules : \n " + sb.String()) + } else { + // Debug condition : delete once this feature is ready to be implemented + logger.Logger.Debug().Msg("Workflow received not added, current schedule contains") + for _, booking := range(sb.Bookings){ + logger.Logger.Debug().Msg(booking.String()) + } + } +} + +func (sb *ScheduledBooking) GetListNames()(list_names []string ){ + for _, schedule := range(sb.Bookings){ + list_names = append(list_names, schedule.Workflow) + } + + return +} + +func (sb *ScheduledBooking) scheduleAlreadyExists(new_booking Booking) bool { + for _, booking := range(sb.Bookings){ + if booking.Equals(new_booking){ + return true + } + } + return false +} + +func (b *Booking) String() string { + return fmt.Sprintf("{Workflow : %s , startDate : %s , stopDate : %s }", b.Workflow, b.Start.Format(time.RFC3339), b.Stop.Format(time.RFC3339)) + +} + +func (sb *ScheduledBooking) String() string { + var str string + for _, booking := range(sb.Bookings){ + str += fmt.Sprintf("%s\n", booking.String()) + } + + return str +}