func printServiceStatus()

in sharedlibraries/statushelper/statushelper.go [326:402]


func printServiceStatus(ctx context.Context, status *spb.ServiceStatus, compact bool) {
	printColor(info, "--------------------------------------------------------------------------------\n")
	switch status.GetState() {
	case spb.State_UNSPECIFIED_STATE:
		printColor(faint, "%s: %s\n", status.GetName(), status.GetUnspecifiedStateMessage())
		return
	case spb.State_FAILURE_STATE:
		printColor(faint, "%s: Disabled\n", status.GetName())
		return
	case spb.State_ERROR_STATE:
		if status.GetErrorMessage() == "" {
			status.ErrorMessage = "could not determine status"
		}
		printColor(failure, "%s: Error: %s\n", status.GetName(), status.GetErrorMessage())
		return
	default:
		printColor(info, "%s: ", status.GetName())
		printColor(success, "Enabled\n")
	}

	printColor(info, "    Status: ")
	if status.GetFullyFunctional() == spb.State_SUCCESS_STATE {
		printColor(success, "Fully Functional\n")
	} else {
		if status.GetErrorMessage() == "" {
			status.ErrorMessage = "could not determine status"
		}
		printColor(failure, "Error: %s\n", status.GetErrorMessage())
	}

	if len(status.GetIamPermissions()) > 0 {
		printColor(info, "    IAM Permissions: ")
		var deniedPermissions []*spb.IAMPermission
		for _, permission := range status.GetIamPermissions() {
			if permission.GetGranted() != spb.State_SUCCESS_STATE {
				deniedPermissions = append(deniedPermissions, permission)
			}
		}
		if len(deniedPermissions) == 0 {
			printColor(success, "All granted\n")
		} else {
			printColor(failure, "%d not granted (output limited to 5)\n", len(deniedPermissions))
		}
		if !compact {
			sort.Slice(deniedPermissions, func(i, j int) bool {
				return deniedPermissions[i].GetGranted() < deniedPermissions[j].GetGranted()
			})
			for i, permission := range deniedPermissions {
				if i >= 5 {
					break
				}
				printState(ctx, fmt.Sprintf("        %s", permission.GetName()), permission.GetGranted())
			}
		}
	}
	if compact {
		return
	}

	if len(status.GetConfigValues()) > 0 {
		printColor(info, "    Configuration:\n")
		sort.Slice(status.GetConfigValues(), func(i, j int) bool {
			return status.GetConfigValues()[i].GetName() < status.GetConfigValues()[j].GetName()
		})
	}
	for _, configValue := range status.GetConfigValues() {
		defaultString := "default"
		if !configValue.GetIsDefault() {
			defaultString = "configuration file"
		}
		if configValue.GetValue() == "" {
			printColor(info, "        %s:\tnil\t(%s)\n", configValue.GetName(), defaultString)
		} else {
			printColor(info, "        %s:\t%s\t(%s)\n", configValue.GetName(), configValue.GetValue(), defaultString)
		}
	}
}