mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-07-30 12:38:47 +00:00
* feat: atlantis import * feat: atlantis import * regenerate mock comment builder * remove duplicate err check * instrumented import command runner/builder * atlantis import subcommand accept args before hyphen * fix link checker * docs: review feedback * fix atlantis import options order * Update runatlantis.io/docs/using-atlantis.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/using-atlantis.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/using-atlantis.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/using-atlantis.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/using-atlantis.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update server/events/comment_parser.go Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update server/events/comment_parser.go Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/server-side-repo-config.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update runatlantis.io/docs/command-requirements.md Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update server/events/command_requirement_handler.go Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * Update server/events/command_requirement_handler_test.go Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com> * fix test import usage * fix e2e expected txt * fix doc link * docs: workflow import stage/step * docs fixup Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com>
88 lines
3.1 KiB
Go
88 lines
3.1 KiB
Go
package events
|
|
|
|
import (
|
|
"github.com/runatlantis/atlantis/server/events/command"
|
|
"github.com/runatlantis/atlantis/server/metrics"
|
|
"github.com/uber-go/tally"
|
|
)
|
|
|
|
type IntrumentedCommandRunner interface {
|
|
Plan(ctx command.ProjectContext) command.ProjectResult
|
|
PolicyCheck(ctx command.ProjectContext) command.ProjectResult
|
|
Apply(ctx command.ProjectContext) command.ProjectResult
|
|
ApprovePolicies(ctx command.ProjectContext) command.ProjectResult
|
|
Import(ctx command.ProjectContext) command.ProjectResult
|
|
}
|
|
|
|
type InstrumentedProjectCommandRunner struct {
|
|
projectCommandRunner ProjectCommandRunner
|
|
scope tally.Scope
|
|
}
|
|
|
|
func NewInstrumentedProjectCommandRunner(scope tally.Scope, projectCommandRunner ProjectCommandRunner) *InstrumentedProjectCommandRunner {
|
|
projectTags := command.ProjectScopeTags{}
|
|
scope = scope.Tagged(projectTags.Loadtags())
|
|
|
|
for _, m := range []string{metrics.ExecutionSuccessMetric, metrics.ExecutionErrorMetric, metrics.ExecutionFailureMetric} {
|
|
metrics.InitCounter(scope, m)
|
|
}
|
|
|
|
return &InstrumentedProjectCommandRunner{
|
|
projectCommandRunner: projectCommandRunner,
|
|
scope: scope,
|
|
}
|
|
}
|
|
|
|
func (p *InstrumentedProjectCommandRunner) Plan(ctx command.ProjectContext) command.ProjectResult {
|
|
return RunAndEmitStats("plan", ctx, p.projectCommandRunner.Plan, p.scope)
|
|
}
|
|
|
|
func (p *InstrumentedProjectCommandRunner) PolicyCheck(ctx command.ProjectContext) command.ProjectResult {
|
|
return RunAndEmitStats("policy check", ctx, p.projectCommandRunner.PolicyCheck, p.scope)
|
|
}
|
|
|
|
func (p *InstrumentedProjectCommandRunner) Apply(ctx command.ProjectContext) command.ProjectResult {
|
|
return RunAndEmitStats("apply", ctx, p.projectCommandRunner.Apply, p.scope)
|
|
}
|
|
|
|
func (p *InstrumentedProjectCommandRunner) ApprovePolicies(ctx command.ProjectContext) command.ProjectResult {
|
|
return RunAndEmitStats("approve policies", ctx, p.projectCommandRunner.Apply, p.scope)
|
|
}
|
|
|
|
func (p *InstrumentedProjectCommandRunner) Import(ctx command.ProjectContext) command.ProjectResult {
|
|
return RunAndEmitStats("import", ctx, p.projectCommandRunner.Import, p.scope)
|
|
}
|
|
|
|
func RunAndEmitStats(commandName string, ctx command.ProjectContext, execute func(ctx command.ProjectContext) command.ProjectResult, scope tally.Scope) command.ProjectResult {
|
|
// ensures we are differentiating between project level command and overall command
|
|
scope = ctx.SetProjectScopeTags(scope)
|
|
logger := ctx.Log
|
|
|
|
executionTime := scope.Timer(metrics.ExecutionTimeMetric).Start()
|
|
defer executionTime.Stop()
|
|
|
|
executionSuccess := scope.Counter(metrics.ExecutionSuccessMetric)
|
|
executionError := scope.Counter(metrics.ExecutionErrorMetric)
|
|
executionFailure := scope.Counter(metrics.ExecutionFailureMetric)
|
|
|
|
result := execute(ctx)
|
|
|
|
if result.Error != nil {
|
|
executionError.Inc(1)
|
|
logger.Err("Error running %s operation: %s", commandName, result.Error.Error())
|
|
return result
|
|
}
|
|
|
|
if result.Failure != "" {
|
|
executionFailure.Inc(1)
|
|
logger.Err("Failure running %s operation: %s", commandName, result.Failure)
|
|
return result
|
|
}
|
|
|
|
logger.Info("%s success. output available at: %s", commandName, ctx.Pull.URL)
|
|
|
|
executionSuccess.Inc(1)
|
|
return result
|
|
|
|
}
|