78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
package environment
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/openHPI/poseidon/internal/runner"
|
|
"github.com/openHPI/poseidon/pkg/dto"
|
|
)
|
|
|
|
// AbstractManager is used to have a fallback environment manager in the chain of responsibility
|
|
// following the null object pattern.
|
|
type AbstractManager struct {
|
|
nextHandler ManagerHandler
|
|
runnerManager runner.Manager
|
|
}
|
|
|
|
func (n *AbstractManager) SetNextHandler(next ManagerHandler) {
|
|
n.nextHandler = next
|
|
}
|
|
|
|
func (n *AbstractManager) NextHandler() ManagerHandler {
|
|
if n.HasNextHandler() {
|
|
return n.nextHandler
|
|
} else {
|
|
return &AbstractManager{}
|
|
}
|
|
}
|
|
|
|
func (n *AbstractManager) HasNextHandler() bool {
|
|
return n.nextHandler != nil
|
|
}
|
|
|
|
func (n *AbstractManager) List(_ bool) ([]runner.ExecutionEnvironment, error) {
|
|
return []runner.ExecutionEnvironment{}, nil
|
|
}
|
|
|
|
func (n *AbstractManager) Get(_ dto.EnvironmentID, _ bool) (runner.ExecutionEnvironment, error) {
|
|
return nil, runner.ErrRunnerNotFound
|
|
}
|
|
|
|
func (n *AbstractManager) CreateOrUpdate(_ dto.EnvironmentID, _ dto.ExecutionEnvironmentRequest, _ context.Context) (
|
|
bool, error) {
|
|
return false, nil
|
|
}
|
|
|
|
func (n *AbstractManager) Delete(id dto.EnvironmentID) (bool, error) {
|
|
if n.runnerManager == nil {
|
|
return false, nil
|
|
}
|
|
|
|
e, ok := n.runnerManager.GetEnvironment(id)
|
|
if !ok {
|
|
isFound, err := n.NextHandler().Delete(id)
|
|
if err != nil {
|
|
return false, fmt.Errorf("abstract wrapped: %w", err)
|
|
}
|
|
return isFound, nil
|
|
}
|
|
|
|
n.runnerManager.DeleteEnvironment(id)
|
|
if err := e.Delete(runner.ErrDestroyedByAPIRequest); err != nil {
|
|
return true, fmt.Errorf("could not delete environment: %w", err)
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
func (n *AbstractManager) Statistics() map[dto.EnvironmentID]*dto.StatisticalExecutionEnvironmentData {
|
|
if n.runnerManager == nil {
|
|
return map[dto.EnvironmentID]*dto.StatisticalExecutionEnvironmentData{}
|
|
}
|
|
|
|
statistics := n.NextHandler().Statistics()
|
|
for k, v := range n.runnerManager.EnvironmentStatistics() {
|
|
statistics[k] = v
|
|
}
|
|
return statistics
|
|
}
|