Improve webhook-based autoscaler log (#352)
The controller had been writing confusing messages like the below on missing scale target:
```
Found too many scale targets: It must be exactly one to avoid ambiguity. Either set WatchNamespace for the webhook-based autoscaler to let it only find HRAs in the namespace, or update Repository or Organization fields in your RunnerDeployment resources to fix the ambiguity.{"scaleTargets": ""}
```
This fixes that, while improving many kinds of messages written while reconcilation, so that the error message is more actionable.
This commit is contained in:
parent
9da123ae5e
commit
9890a90e69
|
|
@ -128,12 +128,17 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) Handle(w http.Respons
|
||||||
|
|
||||||
var target *ScaleTarget
|
var target *ScaleTarget
|
||||||
|
|
||||||
autoscaler.Log.Info("processing webhook event", "eventType", webhookType)
|
log := autoscaler.Log.WithValues(
|
||||||
|
"event", webhookType,
|
||||||
|
"hookID", r.Header.Get("X-GitHub-Hook-ID"),
|
||||||
|
"delivery", r.Header.Get("X-GitHub-Delivery"),
|
||||||
|
)
|
||||||
|
|
||||||
switch e := event.(type) {
|
switch e := event.(type) {
|
||||||
case *gogithub.PushEvent:
|
case *gogithub.PushEvent:
|
||||||
target, err = autoscaler.getScaleUpTarget(
|
target, err = autoscaler.getScaleUpTarget(
|
||||||
context.TODO(),
|
context.TODO(),
|
||||||
|
log,
|
||||||
e.Repo.GetName(),
|
e.Repo.GetName(),
|
||||||
e.Repo.Owner.GetLogin(),
|
e.Repo.Owner.GetLogin(),
|
||||||
e.Repo.Owner.GetType(),
|
e.Repo.Owner.GetType(),
|
||||||
|
|
@ -142,6 +147,7 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) Handle(w http.Respons
|
||||||
case *gogithub.PullRequestEvent:
|
case *gogithub.PullRequestEvent:
|
||||||
target, err = autoscaler.getScaleUpTarget(
|
target, err = autoscaler.getScaleUpTarget(
|
||||||
context.TODO(),
|
context.TODO(),
|
||||||
|
log,
|
||||||
e.Repo.GetName(),
|
e.Repo.GetName(),
|
||||||
e.Repo.Owner.GetLogin(),
|
e.Repo.Owner.GetLogin(),
|
||||||
e.Repo.Owner.GetType(),
|
e.Repo.Owner.GetType(),
|
||||||
|
|
@ -150,6 +156,7 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) Handle(w http.Respons
|
||||||
case *gogithub.CheckRunEvent:
|
case *gogithub.CheckRunEvent:
|
||||||
target, err = autoscaler.getScaleUpTarget(
|
target, err = autoscaler.getScaleUpTarget(
|
||||||
context.TODO(),
|
context.TODO(),
|
||||||
|
log,
|
||||||
e.Repo.GetName(),
|
e.Repo.GetName(),
|
||||||
e.Repo.Owner.GetLogin(),
|
e.Repo.Owner.GetLogin(),
|
||||||
e.Repo.Owner.GetType(),
|
e.Repo.Owner.GetType(),
|
||||||
|
|
@ -163,20 +170,20 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) Handle(w http.Respons
|
||||||
msg := "pong"
|
msg := "pong"
|
||||||
|
|
||||||
if written, err := w.Write([]byte(msg)); err != nil {
|
if written, err := w.Write([]byte(msg)); err != nil {
|
||||||
autoscaler.Log.Error(err, "failed writing http response", "msg", msg, "written", written)
|
log.Error(err, "failed writing http response", "msg", msg, "written", written)
|
||||||
}
|
}
|
||||||
|
|
||||||
autoscaler.Log.Info("received ping event")
|
log.Info("received ping event")
|
||||||
|
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
autoscaler.Log.Info("unknown event type", "eventType", webhookType)
|
log.Info("unknown event type", "eventType", webhookType)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
autoscaler.Log.Error(err, "handling check_run event")
|
log.Error(err, "handling check_run event")
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -184,21 +191,21 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) Handle(w http.Respons
|
||||||
if target == nil {
|
if target == nil {
|
||||||
msg := "no horizontalrunnerautoscaler to scale for this github event"
|
msg := "no horizontalrunnerautoscaler to scale for this github event"
|
||||||
|
|
||||||
autoscaler.Log.Info(msg, "eventType", webhookType)
|
log.Info(msg, "eventType", webhookType)
|
||||||
|
|
||||||
ok = true
|
ok = true
|
||||||
|
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
||||||
if written, err := w.Write([]byte(msg)); err != nil {
|
if written, err := w.Write([]byte(msg)); err != nil {
|
||||||
autoscaler.Log.Error(err, "failed writing http response", "msg", msg, "written", written)
|
log.Error(err, "failed writing http response", "msg", msg, "written", written)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := autoscaler.tryScaleUp(context.TODO(), target); err != nil {
|
if err := autoscaler.tryScaleUp(context.TODO(), target); err != nil {
|
||||||
autoscaler.Log.Error(err, "could not scale up")
|
log.Error(err, "could not scale up")
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -212,7 +219,7 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) Handle(w http.Respons
|
||||||
autoscaler.Log.Info(msg)
|
autoscaler.Log.Info(msg)
|
||||||
|
|
||||||
if written, err := w.Write([]byte(msg)); err != nil {
|
if written, err := w.Write([]byte(msg)); err != nil {
|
||||||
autoscaler.Log.Error(err, "failed writing http response", "msg", msg, "written", written)
|
log.Error(err, "failed writing http response", "msg", msg, "written", written)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -303,7 +310,13 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) getScaleTarget(ctx co
|
||||||
|
|
||||||
targets := autoscaler.searchScaleTargets(hras, f)
|
targets := autoscaler.searchScaleTargets(hras, f)
|
||||||
|
|
||||||
if len(targets) != 1 {
|
n := len(targets)
|
||||||
|
|
||||||
|
if n == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if n > 1 {
|
||||||
var scaleTargetIDs []string
|
var scaleTargetIDs []string
|
||||||
|
|
||||||
for _, t := range targets {
|
for _, t := range targets {
|
||||||
|
|
@ -323,11 +336,11 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) getScaleTarget(ctx co
|
||||||
return &targets[0], nil
|
return &targets[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) getScaleUpTarget(ctx context.Context, repo, owner, ownerType string, f func(v1alpha1.ScaleUpTrigger) bool) (*ScaleTarget, error) {
|
func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) getScaleUpTarget(ctx context.Context, log logr.Logger, repo, owner, ownerType string, f func(v1alpha1.ScaleUpTrigger) bool) (*ScaleTarget, error) {
|
||||||
repositoryRunnerKey := owner + "/" + repo
|
repositoryRunnerKey := owner + "/" + repo
|
||||||
|
|
||||||
autoscaler.Log.Info("finding repository-wide runner", "repository", repositoryRunnerKey)
|
|
||||||
if target, err := autoscaler.getScaleTarget(ctx, repositoryRunnerKey, f); err != nil {
|
if target, err := autoscaler.getScaleTarget(ctx, repositoryRunnerKey, f); err != nil {
|
||||||
|
autoscaler.Log.Info("finding repository-wide runner", "repository", repositoryRunnerKey)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if target != nil {
|
} else if target != nil {
|
||||||
autoscaler.Log.Info("scale up target is repository-wide runners", "repository", repo)
|
autoscaler.Log.Info("scale up target is repository-wide runners", "repository", repo)
|
||||||
|
|
@ -338,14 +351,18 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) getScaleUpTarget(ctx
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
autoscaler.Log.Info("finding organizational runner", "organization", owner)
|
|
||||||
if target, err := autoscaler.getScaleTarget(ctx, owner, f); err != nil {
|
if target, err := autoscaler.getScaleTarget(ctx, owner, f); err != nil {
|
||||||
|
log.Info("finding organizational runner", "organization", owner)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if target != nil {
|
} else if target != nil {
|
||||||
autoscaler.Log.Info("scale up target is organizational runners", "organization", owner)
|
log.Info("scale up target is organizational runners", "organization", owner)
|
||||||
return target, nil
|
return target, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Info(
|
||||||
|
"Scale target not found. If this is unexpected, ensure that there is exactly one repository-wide or organizational runner deployment that matches this webhook event",
|
||||||
|
)
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue