mirror of https://github.com/databricks/cli.git
tweak log output
- remove time - remove attrs unless level is debug - replace $DEV_VERSION - add acceptance test for --debug
This commit is contained in:
parent
065f9c5941
commit
67d7a965b1
|
@ -0,0 +1,2 @@
|
||||||
|
bundle:
|
||||||
|
name: debug
|
|
@ -0,0 +1,12 @@
|
||||||
|
< } pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=validate:files_to_sync sdk=true
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=fast_validate(readonly)
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=fast_validate(readonly) mutator (read-only)=parallel
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=fast_validate(readonly) mutator (read-only)=parallel mutator (read-only)=validate:SingleNodeCluster
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=fast_validate(readonly) mutator (read-only)=parallel mutator (read-only)=validate:artifact_paths
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=fast_validate(readonly) mutator (read-only)=parallel mutator (read-only)=validate:job_cluster_key_defined
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=fast_validate(readonly) mutator (read-only)=parallel mutator (read-only)=validate:job_task_cluster_spec
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=validate:files_to_sync
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=validate:folder_permissions
|
||||||
|
Debug: ApplyReadOnly pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=validate:validate_sync_patterns
|
||||||
|
Debug: Path has type directory (ID: 1001) pid=00000 mutator=validate mutator (read-only)=parallel mutator (read-only)=validate:files_to_sync
|
|
@ -0,0 +1,86 @@
|
||||||
|
Info: start pid=00000 version=$DEV_VERSION args="$CLI, bundle, validate, --debug"
|
||||||
|
Debug: Found bundle root at $TMPDIR (file $TMPDIR/databricks.yml) pid=00000
|
||||||
|
Debug: Apply pid=00000 mutator=load
|
||||||
|
Info: Phase: load pid=00000 mutator=load
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=EntryPoint
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=scripts.preinit
|
||||||
|
Debug: No script defined for preinit, skipping pid=00000 mutator=load mutator=seq mutator=scripts.preinit
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=ProcessRootIncludes
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=ProcessRootIncludes mutator=seq
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=VerifyCliVersion
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=EnvironmentsToTargets
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=ComputeIdToClusterId
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=InitializeVariables
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=DefineDefaultTarget(default)
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=PythonMutator(load)
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=validate:unique_resource_keys
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=SelectDefaultTarget
|
||||||
|
Debug: Apply pid=00000 mutator=load mutator=seq mutator=SelectDefaultTarget mutator=SelectTarget(default)
|
||||||
|
Debug: Apply pid=00000 mutator=<func>
|
||||||
|
Debug: Apply pid=00000 mutator=initialize
|
||||||
|
Info: Phase: initialize pid=00000 mutator=initialize
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=validate:AllResourcesHaveValues
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=RewriteSyncPaths
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=SyncDefaultPath
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=SyncInferRoot
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=InitializeWorkspaceClient
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=PopulateCurrentUser
|
||||||
|
Debug: GET /api/2.0/preview/scim/v2/Me
|
||||||
|
< HTTP/1.1 200 OK
|
||||||
|
< {
|
||||||
|
< "userName": "$USERNAME"
|
||||||
|
< } pid=00000 mutator=initialize mutator=seq mutator=PopulateCurrentUser sdk=true
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=LoadGitDetails
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ApplySourceLinkedDeploymentPreset
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=DefineDefaultWorkspaceRoot
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ExpandWorkspaceRoot
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=DefaultWorkspacePaths
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=PrependWorkspacePrefix
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=RewriteWorkspacePrefix
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=SetVariables
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=PythonMutator(init)
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=PythonMutator(load_resources)
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=PythonMutator(apply_mutators)
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ResolveVariableReferences
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ResolveResourceReferences
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ResolveVariableReferences
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=MergeJobClusters
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=MergeJobParameters
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=MergeJobTasks
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=MergePipelineClusters
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=MergeApps
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=CaptureSchemaDependency
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=CheckPermissions
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=SetRunAs
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=OverrideCompute
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ConfigureDashboardDefaults
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ConfigureVolumeDefaults
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ProcessTargetMode
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ApplyPresets
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=DefaultQueueing
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ExpandPipelineGlobPaths
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ConfigureWSFS
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=TranslatePaths
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=PythonWrapperWarning
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=apps.Validate
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ValidateSharedRootPermissions
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=ApplyBundlePermissions
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=FilterCurrentUserFromPermissions
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=metadata.AnnotateJobs
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=metadata.AnnotatePipelines
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=terraform.Initialize
|
||||||
|
Debug: Using Terraform from DATABRICKS_TF_EXEC_PATH at $TMPHOME pid=00000 mutator=initialize mutator=seq mutator=terraform.Initialize
|
||||||
|
Debug: DATABRICKS_TF_CLI_CONFIG_FILE is not defined pid=00000 mutator=initialize mutator=seq mutator=terraform.Initialize
|
||||||
|
Debug: Environment variables for Terraform: ...redacted... pid=00000 mutator=initialize mutator=seq mutator=terraform.Initialize
|
||||||
|
Debug: Apply pid=00000 mutator=initialize mutator=seq mutator=scripts.postinit
|
||||||
|
Debug: No script defined for postinit, skipping pid=00000 mutator=initialize mutator=seq mutator=scripts.postinit
|
||||||
|
Debug: Apply pid=00000 mutator=validate
|
||||||
|
Debug: GET /api/2.0/workspace/get-status?path=/Workspace/Users/$USERNAME/.bundle/debug/default/files
|
||||||
|
< HTTP/1.1 200 OK
|
||||||
|
< {
|
||||||
|
< "object_id": 1001,
|
||||||
|
< "object_type": "DIRECTORY",
|
||||||
|
< "resource_id": "1001"
|
||||||
|
Info: completed execution pid=00000 exit_code=0
|
|
@ -0,0 +1,7 @@
|
||||||
|
Name: debug
|
||||||
|
Target: default
|
||||||
|
Workspace:
|
||||||
|
User: $USERNAME
|
||||||
|
Path: /Workspace/Users/$USERNAME/.bundle/debug/default
|
||||||
|
|
||||||
|
Validation OK!
|
|
@ -0,0 +1,3 @@
|
||||||
|
$CLI bundle validate --debug > out.stdout.txt 2> full.stderr.txt
|
||||||
|
grep -vw parallel full.stderr.txt > out.stderr.txt
|
||||||
|
grep -w parallel full.stderr.txt | sort > out.stderr.parallel.txt
|
|
@ -0,0 +1,8 @@
|
||||||
|
[[Repls]]
|
||||||
|
# The keys are unsorted and also vary per OS
|
||||||
|
Old = 'Environment variables for Terraform: ([A-Z_ ,]+) '
|
||||||
|
New = 'Environment variables for Terraform: ...redacted... '
|
||||||
|
|
||||||
|
[[Repls]]
|
||||||
|
Old = 'pid=[0-9]+'
|
||||||
|
New = 'pid=00000'
|
|
@ -3,6 +3,7 @@
|
||||||
>>> chmod 000 .git
|
>>> chmod 000 .git
|
||||||
|
|
||||||
>>> $CLI bundle validate
|
>>> $CLI bundle validate
|
||||||
|
Warn: failed to read .git: unable to load repository specific gitconfig: open config: permission denied
|
||||||
Error: unable to load repository specific gitconfig: open config: permission denied
|
Error: unable to load repository specific gitconfig: open config: permission denied
|
||||||
|
|
||||||
Name: git-permerror
|
Name: git-permerror
|
||||||
|
@ -16,6 +17,7 @@ Found 1 error
|
||||||
Exit code: 1
|
Exit code: 1
|
||||||
|
|
||||||
>>> $CLI bundle validate -o json
|
>>> $CLI bundle validate -o json
|
||||||
|
Warn: failed to read .git: unable to load repository specific gitconfig: open config: permission denied
|
||||||
Error: unable to load repository specific gitconfig: open config: permission denied
|
Error: unable to load repository specific gitconfig: open config: permission denied
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,6 +28,7 @@ Exit code: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
>>> withdir subdir/a/b $CLI bundle validate -o json
|
>>> withdir subdir/a/b $CLI bundle validate -o json
|
||||||
|
Warn: failed to read .git: unable to load repository specific gitconfig: open config: permission denied
|
||||||
Error: unable to load repository specific gitconfig: open config: permission denied
|
Error: unable to load repository specific gitconfig: open config: permission denied
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,12 +44,16 @@ Exit code: 1
|
||||||
>>> chmod 000 .git/HEAD
|
>>> chmod 000 .git/HEAD
|
||||||
|
|
||||||
>>> $CLI bundle validate -o json
|
>>> $CLI bundle validate -o json
|
||||||
|
Warn: failed to load current branch: open HEAD: permission denied
|
||||||
|
Warn: failed to load latest commit: open HEAD: permission denied
|
||||||
{
|
{
|
||||||
"bundle_root_path": ".",
|
"bundle_root_path": ".",
|
||||||
"inferred": true
|
"inferred": true
|
||||||
}
|
}
|
||||||
|
|
||||||
>>> withdir subdir/a/b $CLI bundle validate -o json
|
>>> withdir subdir/a/b $CLI bundle validate -o json
|
||||||
|
Warn: failed to load current branch: open HEAD: permission denied
|
||||||
|
Warn: failed to load latest commit: open HEAD: permission denied
|
||||||
{
|
{
|
||||||
"bundle_root_path": ".",
|
"bundle_root_path": ".",
|
||||||
"inferred": true
|
"inferred": true
|
||||||
|
@ -58,6 +65,7 @@ Exit code: 1
|
||||||
>>> chmod 000 .git/config
|
>>> chmod 000 .git/config
|
||||||
|
|
||||||
>>> $CLI bundle validate -o json
|
>>> $CLI bundle validate -o json
|
||||||
|
Warn: failed to read .git: unable to load repository specific gitconfig: open config: permission denied
|
||||||
Error: unable to load repository specific gitconfig: open config: permission denied
|
Error: unable to load repository specific gitconfig: open config: permission denied
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,6 +76,7 @@ Exit code: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
>>> withdir subdir/a/b $CLI bundle validate -o json
|
>>> withdir subdir/a/b $CLI bundle validate -o json
|
||||||
|
Warn: failed to read .git: unable to load repository specific gitconfig: open config: permission denied
|
||||||
Error: unable to load repository specific gitconfig: open config: permission denied
|
Error: unable to load repository specific gitconfig: open config: permission denied
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ Workspace:
|
||||||
Validation OK!
|
Validation OK!
|
||||||
|
|
||||||
>>> $CLI bundle validate -t prod
|
>>> $CLI bundle validate -t prod
|
||||||
|
Warn: target with 'mode: production' should specify an explicit 'targets.prod.git' configuration
|
||||||
Name: my_dbt_sql
|
Name: my_dbt_sql
|
||||||
Target: prod
|
Target: prod
|
||||||
Workspace:
|
Workspace:
|
||||||
|
|
|
@ -20,6 +20,7 @@ Workspace:
|
||||||
Validation OK!
|
Validation OK!
|
||||||
|
|
||||||
>>> $CLI bundle validate -t prod
|
>>> $CLI bundle validate -t prod
|
||||||
|
Warn: target with 'mode: production' should specify an explicit 'targets.prod.git' configuration
|
||||||
Name: my_default_python
|
Name: my_default_python
|
||||||
Target: prod
|
Target: prod
|
||||||
Workspace:
|
Workspace:
|
||||||
|
|
|
@ -22,6 +22,7 @@ Workspace:
|
||||||
Validation OK!
|
Validation OK!
|
||||||
|
|
||||||
>>> $CLI bundle validate -t prod
|
>>> $CLI bundle validate -t prod
|
||||||
|
Warn: target with 'mode: production' should specify an explicit 'targets.prod.git' configuration
|
||||||
Name: my_default_sql
|
Name: my_default_sql
|
||||||
Target: prod
|
Target: prod
|
||||||
Workspace:
|
Workspace:
|
||||||
|
|
|
@ -10,8 +10,8 @@ import (
|
||||||
|
|
||||||
func TestLogLevelFlagDefault(t *testing.T) {
|
func TestLogLevelFlagDefault(t *testing.T) {
|
||||||
f := NewLogLevelFlag()
|
f := NewLogLevelFlag()
|
||||||
assert.Equal(t, log.LevelDisabled, f.Level())
|
assert.Equal(t, log.LevelWarn, f.Level())
|
||||||
assert.Equal(t, "disabled", f.String())
|
assert.Equal(t, "warn", f.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLogLevelFlagSetValid(t *testing.T) {
|
func TestLogLevelFlagSetValid(t *testing.T) {
|
||||||
|
|
|
@ -53,11 +53,11 @@ func NewFriendlyHandler(out io.Writer, opts *Options) slog.Handler {
|
||||||
|
|
||||||
// Cache (colorized) level strings.
|
// Cache (colorized) level strings.
|
||||||
// The colors to use for each level are configured in `colors.go`.
|
// The colors to use for each level are configured in `colors.go`.
|
||||||
h.levelTrace = h.sprintf(ttyColorLevelTrace, "%5s", "TRACE")
|
h.levelTrace = h.sprintf(ttyColorLevelTrace, "%s", "Trace:")
|
||||||
h.levelDebug = h.sprintf(ttyColorLevelDebug, "%5s", "DEBUG")
|
h.levelDebug = h.sprintf(ttyColorLevelDebug, "%s", "Debug:")
|
||||||
h.levelInfo = h.sprintf(ttyColorLevelInfo, "%5s", "INFO")
|
h.levelInfo = h.sprintf(ttyColorLevelInfo, "%s", "Info:")
|
||||||
h.levelWarn = h.sprintf(ttyColorLevelWarn, "%5s", "WARN")
|
h.levelWarn = h.sprintf(ttyColorLevelWarn, "%s", "Warn:")
|
||||||
h.levelError = h.sprintf(ttyColorLevelError, "%5s", "ERROR")
|
h.levelError = h.sprintf(ttyColorLevelError, "%s", "Error:")
|
||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,33 +185,36 @@ func (s *handleState) appendAttr(a slog.Attr) {
|
||||||
// Handle implements slog.Handler.
|
// Handle implements slog.Handler.
|
||||||
func (h *friendlyHandler) Handle(ctx context.Context, r slog.Record) error {
|
func (h *friendlyHandler) Handle(ctx context.Context, r slog.Record) error {
|
||||||
state := h.handleState()
|
state := h.handleState()
|
||||||
state.append(h.sprintf(ttyColorTime, "%02d:%02d:%02d ", r.Time.Hour(), r.Time.Minute(), r.Time.Second()))
|
|
||||||
state.appendf("%s ", h.coloredLevel(r))
|
state.appendf("%s ", h.coloredLevel(r))
|
||||||
state.append(h.sprint(ttyColorMessage, r.Message))
|
state.append(h.sprint(ttyColorMessage, r.Message))
|
||||||
|
|
||||||
// Handle state from WithGroup and WithAttrs.
|
if h.opts.Level.Level() <= slog.LevelDebug {
|
||||||
goas := h.goas
|
|
||||||
if r.NumAttrs() == 0 {
|
// Handle state from WithGroup and WithAttrs.
|
||||||
// If the record has no Attrs, remove groups at the end of the list; they are empty.
|
goas := h.goas
|
||||||
for len(goas) > 0 && goas[len(goas)-1].group != "" {
|
if r.NumAttrs() == 0 {
|
||||||
goas = goas[:len(goas)-1]
|
// If the record has no Attrs, remove groups at the end of the list; they are empty.
|
||||||
}
|
for len(goas) > 0 && goas[len(goas)-1].group != "" {
|
||||||
}
|
goas = goas[:len(goas)-1]
|
||||||
for _, goa := range goas {
|
}
|
||||||
if goa.group != "" {
|
}
|
||||||
state.openGroup(goa.group)
|
for _, goa := range goas {
|
||||||
} else {
|
if goa.group != "" {
|
||||||
for _, a := range goa.attrs {
|
state.openGroup(goa.group)
|
||||||
state.appendAttr(a)
|
} else {
|
||||||
|
for _, a := range goa.attrs {
|
||||||
|
state.appendAttr(a)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Add attributes from the record.
|
// Add attributes from the record.
|
||||||
r.Attrs(func(a slog.Attr) bool {
|
r.Attrs(func(a slog.Attr) bool {
|
||||||
state.appendAttr(a)
|
state.appendAttr(a)
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Add newline.
|
// Add newline.
|
||||||
state.append("\n")
|
state.append("\n")
|
||||||
|
|
Loading…
Reference in New Issue