#!/usr/bin/env groovy
// -----------------------------------------------------------------------
// Copyright 2024 Open Networking Foundation Contributors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// -----------------------------------------------------------------------
// SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
// SPDX-License-Identifier: Apache-2.0
// -----------------------------------------------------------------------
// Intent: Helper script for kubernetes debugging
// Called by: jjb/pipeline/voltha/bbsim-tests.groovy
// -----------------------------------------------------------------------

// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
String getIam(String func) {
    String src = 'vars/dotkube.groovy'
    String iam = [src, func].join('::')
    return iam
}

// -----------------------------------------------------------------------
// Intent: Log progress message
// -----------------------------------------------------------------------
void enter(String name) {
    // Announce ourselves for log usability
    String iam = getIam(name)
    println("${iam}: ENTER")
    return
}

// -----------------------------------------------------------------------
// Intent: Log progress message
// -----------------------------------------------------------------------
void leave(String name) {
    // Announce ourselves for log usability
    String iam = getIam(name)
    println("${iam}: LEAVE")
    return
}

// -----------------------------------------------------------------------
// Intent: Terminate a process by name.
// -----------------------------------------------------------------------
// Note: Due to an exception casting GString to java.lang.string:
//   - Used for parameterized construction of a command line with args
//   - Passed to jenkins sh("${cmd}")
//   - Command line invoked is currently hardcoded.
// -----------------------------------------------------------------------
Boolean process(String proc, Map args) {
    Boolean ans = true
    String  iam = getIam('process')

    // clusterName: kind-ci
    // config=kind-{clusterName}
    // -------------------------
    // loader.go:223] Config not found: /home/jenkins/.kube/kind-kind-ci
    sh(
        label  : '[DEBUG] ls ~/.kube'
        script : """
echo -e "\n** /bin/ls -ld ~/.kube"
/bin/ls -ld ~/.kube

echo -e "\n** /bin/ls -ld: recursive"
find ~/.kube/. -print0 | xargs -0 /bin/ls -ld
""")

    return(ans)
}

// -----------------------------------------------------------------------
// Intent: Display debug info about .kube/*
// -----------------------------------------------------------------------
// Usage: dotkube([debug:False])
// -----------------------------------------------------------------------
Boolean call\
(
    Map config=[:]    // Args passed to callback function
) {
    // Boolean debug = config.debug ?: false

    String iam = getIam('main')
    Boolean ans = true

    try {
        enter(iam)
        process()
    }

    // [DEBUG] function is non-fatal
    catch (Exception err) { // groovylint-disable-line CatchException
        // ans = false
        println("** ${iam}: EXCEPTION WARNING ${err}")
        // println("** ${iam}: EXCEPTION ${err}")
        // throw err // non-fatal, no need to croak on find/ls errs
    }

    finally {
        leave(iam)
    }

    return(ans)
}

// [EOF]
