Save the environment id for runner monitoring.
This commit is contained in:
@ -36,8 +36,8 @@ func NewNomadEnvironment(apiClient nomad.ExecutorAPI, jobHCL string) (*NomadEnvi
|
||||
return nil, fmt.Errorf("error parsing Nomad job: %w", err)
|
||||
}
|
||||
|
||||
return &NomadEnvironment{apiClient, jobHCL, job,
|
||||
storage.NewMonitoredLocalStorage[runner.Runner](monitoring.MeasurementIdleRunnerNomad, nil)}, nil
|
||||
return &NomadEnvironment{apiClient, jobHCL, job, storage.NewMonitoredLocalStorage[runner.Runner](
|
||||
monitoring.MeasurementIdleRunnerNomad, runner.MonitorRunnersEnvironmentID)}, nil
|
||||
}
|
||||
|
||||
func NewNomadEnvironmentFromRequest(
|
||||
|
@ -3,6 +3,7 @@ package environment
|
||||
import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
nomadApi "github.com/hashicorp/nomad/api"
|
||||
"github.com/hashicorp/nomad/nomad/structs"
|
||||
"github.com/openHPI/poseidon/internal/nomad"
|
||||
"github.com/openHPI/poseidon/internal/runner"
|
||||
@ -139,18 +140,24 @@ func (m *NomadEnvironmentManager) Load() error {
|
||||
jobLogger.Info("Couldn't find config task group in job, skipping ...")
|
||||
continue
|
||||
}
|
||||
environment := &NomadEnvironment{
|
||||
apiClient: m.api,
|
||||
jobHCL: templateEnvironmentJobHCL,
|
||||
job: job,
|
||||
idleRunners: storage.NewMonitoredLocalStorage[runner.Runner](monitoring.MeasurementIdleRunnerNomad, nil),
|
||||
}
|
||||
environment := newNomadEnvironmetFromJob(job, m.api)
|
||||
m.runnerManager.StoreEnvironment(environment)
|
||||
jobLogger.Info("Successfully recovered environment")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// newNomadEnvironmetFromJob creates a Nomad environment from the passed Nomad job definition.
|
||||
func newNomadEnvironmetFromJob(job *nomadApi.Job, apiClient nomad.ExecutorAPI) *NomadEnvironment {
|
||||
return &NomadEnvironment{
|
||||
apiClient: apiClient,
|
||||
jobHCL: templateEnvironmentJobHCL,
|
||||
job: job,
|
||||
idleRunners: storage.NewMonitoredLocalStorage[runner.Runner](
|
||||
monitoring.MeasurementIdleRunnerNomad, runner.MonitorRunnersEnvironmentID),
|
||||
}
|
||||
}
|
||||
|
||||
// loadTemplateEnvironmentJobHCL loads the template environment job HCL from the given path.
|
||||
// If the path is empty, the embedded default file is used.
|
||||
func loadTemplateEnvironmentJobHCL(path string) error {
|
||||
@ -178,12 +185,7 @@ func fetchEnvironment(id dto.EnvironmentID, apiClient nomad.ExecutorAPI) (runner
|
||||
continue
|
||||
}
|
||||
if id == environmentID {
|
||||
fetchedEnvironment = &NomadEnvironment{
|
||||
apiClient: apiClient,
|
||||
jobHCL: templateEnvironmentJobHCL,
|
||||
job: job,
|
||||
idleRunners: storage.NewMonitoredLocalStorage[runner.Runner](monitoring.MeasurementIdleRunnerNomad, nil),
|
||||
}
|
||||
fetchedEnvironment = newNomadEnvironmetFromJob(job, apiClient)
|
||||
}
|
||||
}
|
||||
return fetchedEnvironment, nil
|
||||
|
@ -260,7 +260,9 @@ func TestNomadEnvironmentManager_List(t *testing.T) {
|
||||
environments, err = m.List(true)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 1, len(environments))
|
||||
assert.Equal(t, fetchedEnvironment, environments[0])
|
||||
nomadEnvironment, ok := environments[0].(*NomadEnvironment)
|
||||
assert.True(t, ok)
|
||||
assert.Equal(t, fetchedEnvironment.job, nomadEnvironment.job)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -3,9 +3,11 @@ package runner
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/influxdata/influxdb-client-go/v2/api/write"
|
||||
"github.com/openHPI/poseidon/pkg/dto"
|
||||
"github.com/openHPI/poseidon/pkg/monitoring"
|
||||
"github.com/openHPI/poseidon/pkg/storage"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var ErrNullObject = errors.New("functionality not available for the null object")
|
||||
@ -24,7 +26,14 @@ func NewAbstractManager() *AbstractManager {
|
||||
return &AbstractManager{
|
||||
environments: storage.NewMonitoredLocalStorage[ExecutionEnvironment](
|
||||
monitoring.MeasurementEnvironments, monitorEnvironmentData),
|
||||
usedRunners: storage.NewMonitoredLocalStorage[Runner](monitoring.MeasurementUsedRunner, nil),
|
||||
usedRunners: storage.NewMonitoredLocalStorage[Runner](monitoring.MeasurementUsedRunner, MonitorRunnersEnvironmentID),
|
||||
}
|
||||
}
|
||||
|
||||
// MonitorRunnersEnvironmentID passes the id of the environment e into the monitoring Point p.
|
||||
func MonitorRunnersEnvironmentID(p *write.Point, e Runner, isDeletion bool) {
|
||||
if !isDeletion && e != nil {
|
||||
p.AddTag(monitoring.InfluxKeyEnvironmentID, strconv.Itoa(int(e.Environment())))
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user