Skip to content

Commit

Permalink
Save work
Browse files Browse the repository at this point in the history
  • Loading branch information
Nicolas Ontiveros committed Jul 25, 2023
1 parent 861bdb9 commit 5862e2e
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 27 deletions.
51 changes: 24 additions & 27 deletions pkg/frontend/frontend.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,12 @@ type frontend struct {
baseLog *logrus.Entry
env env.Interface

logMiddleware middleware.LogMiddleware
validateMiddleware middleware.ValidateMiddleware
m middleware.MetricsMiddleware
authMiddleware middleware.AuthMiddleware
apiVersionMiddleware middleware.ApiVersionValidator
logMiddleware middleware.LogMiddleware
validateMiddleware middleware.ValidateMiddleware
m middleware.MetricsMiddleware
authMiddleware middleware.AuthMiddleware
apiVersionMiddleware middleware.ApiVersionValidator
maintenanceMiddleware middleware.MaintenanceMiddleware

dbAsyncOperations database.AsyncOperations
dbClusterManagerConfiguration database.ClusterManagerConfigurations
Expand Down Expand Up @@ -152,6 +153,7 @@ func NewFrontend(ctx context.Context,
dbOpenShiftVersions: dbOpenShiftVersions,
apis: apis,
m: middleware.MetricsMiddleware{Emitter: m},
maintenanceMiddleware: middleware.MaintenanceMiddleware{Emitter: m},
aead: aead,
hiveClusterManager: hiveClusterManager,
kubeActionsFactory: kubeActionsFactory,
Expand Down Expand Up @@ -294,22 +296,17 @@ func (f *frontend) chiAuthenticatedRoutes(router chi.Router) {
})
r.Get("/supportedvmsizes", f.supportedvmsizes)

r.Route("/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}/etcdrecovery",
func(r chi.Router) {
r.Post("/", f.postAdminOpenShiftClusterEtcdRecovery)
})

r.Route("/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}/kubernetesobjects",
func(r chi.Router) {
r.Get("/", f.getAdminKubernetesObjects)
r.Post("/", f.postAdminKubernetesObjects)
r.Delete("/", f.deleteAdminKubernetesObjects)
},
)

r.Route("/subscriptions/{subscriptionId}", func(r chi.Router) {
r.Route("/resourcegroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}", func(r chi.Router) {
r.Post("/approvecsr", f.postAdminOpenShiftClusterApproveCSR)
// Etcd recovery
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/etcdrecovery", f.postAdminOpenShiftClusterEtcdRecovery)

// Kubernetes objects
r.Get("/kubernetesobjects", f.getAdminKubernetesObjects)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/kubernetesobjects", f.postAdminKubernetesObjects)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Delete("/kubernetesobjects", f.deleteAdminKubernetesObjects)

r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/approvecsr", f.postAdminOpenShiftClusterApproveCSR)

// Pod logs
r.Get("/kubernetespodlogs", f.getAdminKubernetesPodLogs)
Expand All @@ -320,23 +317,23 @@ func (f *frontend) chiAuthenticatedRoutes(router chi.Router) {

r.Get("/clusterdeployment", f.getAdminHiveClusterDeployment)

r.Post("/redeployvm", f.postAdminOpenShiftClusterRedeployVM)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/redeployvm", f.postAdminOpenShiftClusterRedeployVM)

r.Post("/stopvm", f.postAdminOpenShiftClusterStopVM)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/stopvm", f.postAdminOpenShiftClusterStopVM)

r.Post("/startvm", f.postAdminOpenShiftClusterStartVM)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/startvm", f.postAdminOpenShiftClusterStartVM)

r.Post("/upgrade", f.postAdminOpenShiftUpgrade)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/upgrade", f.postAdminOpenShiftUpgrade)

r.Get("/skus", f.getAdminOpenShiftClusterVMResizeOptions)

r.Post("/resize", f.postAdminOpenShiftClusterVMResize)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/resize", f.postAdminOpenShiftClusterVMResize)

r.Post("/reconcilefailednic", f.postAdminReconcileFailedNIC)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/reconcilefailednic", f.postAdminReconcileFailedNIC)

r.Post("/cordonnode", f.postAdminOpenShiftClusterCordonNode)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/cordonnode", f.postAdminOpenShiftClusterCordonNode)

r.Post("/drainnode", f.postAdminOpenShiftClusterDrainNode)
r.With(f.maintenanceMiddleware.EmitUnplannedMaintenanceSignal).Post("/drainnode", f.postAdminOpenShiftClusterDrainNode)
})
})

Expand Down
31 changes: 31 additions & 0 deletions pkg/frontend/middleware/maintenance.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package middleware

type MaintenanceMiddleware struct {
metrics.Emitter
}

// Emit metric for unplanned maintenance
func (mm MaintenanceMiddleware) EmitUnplannedMaintenanceSignal(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx, cancel := context.WithCancel(r.Context())
defer cancel()

resourceID := strings.TrimPrefix(filepath.Dir(r.URL.Path), "/admin")

go func(ctx context.Contetxt, resourceID string) {
for {
mm.EmitGauge("frontend.maintenance.unplanned", 1, map[string]string{
"resource_id": resourceID,
})
select {
case <-ctx.Done():
return
default:
time.Sleep(1 * time.Minute)
}
}
}(ctx, resourceID)

h.ServeHTTP(w, r)
})
}

0 comments on commit 5862e2e

Please sign in to comment.