mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 11:18:03 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
29
LICENSE
Normal file
29
LICENSE
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
BSD 3-Clause License
|
||||||
|
|
||||||
|
Copyright (c) 2020, Telecom Infra Project
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -104,19 +104,19 @@ function pre_test {
|
|||||||
then
|
then
|
||||||
# Kill any existing processes on this serial port
|
# Kill any existing processes on this serial port
|
||||||
pkill -f ".*openwrt_ctl.*$LF_SERIAL.*"
|
pkill -f ".*openwrt_ctl.*$LF_SERIAL.*"
|
||||||
../openwrt_ctl.py --action lurk --tty $LF_SERIAL --scheme serial --user root --passwd $LFPASSWD --prompt "\[root@" > $LF_SER_LOG 2>&1 &
|
../openwrt_ctl.py --action lurk $OWRTCTL_ARGS --tty $LF_SERIAL --scheme serial --user root --passwd $LFPASSWD --prompt "\[root@" > $LF_SER_LOG 2>&1 &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "_${AP_SERIAL}" != "_NONE" ]
|
if [ "_${AP_SERIAL}" != "_NONE" ]
|
||||||
then
|
then
|
||||||
# Kill any existing processes on this serial port
|
# Kill any existing processes on this serial port
|
||||||
pkill -f ".*openwrt_ctl.*$AP_SERIAL.*"
|
pkill -f ".*openwrt_ctl.*$AP_SERIAL.*"
|
||||||
../openwrt_ctl.py --action logread --tty $AP_SERIAL --scheme serial > $DUT_SER_LOG 2>&1 &
|
../openwrt_ctl.py --action logread $OWRTCTL_ARGS --tty $AP_SERIAL --scheme serial > $DUT_SER_LOG 2>&1 &
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function reboot_dut {
|
function reboot_dut {
|
||||||
../openwrt_ctl.py --action reboot --tty $AP_SERIAL --scheme serial
|
../openwrt_ctl.py --action reboot $OWRTCTL_ARGS --tty $AP_SERIAL --scheme serial
|
||||||
# TODO: Support hard-power cycle with power-ctl switch as well?
|
# TODO: Support hard-power cycle with power-ctl switch as well?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
52
gui/kpi.java
52
gui/kpi.java
@@ -1,6 +1,6 @@
|
|||||||
//
|
//
|
||||||
// LANforge-GUI Source Code
|
// LANforge-GUI Source Code
|
||||||
// Copyright (C) 1999-2018 Candela Technologies Inc
|
// Copyright (C) 1999-2020 Candela Technologies Inc
|
||||||
// http://www.candelatech.com
|
// http://www.candelatech.com
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or
|
// This program is free software; you can redistribute it and/or
|
||||||
@@ -45,7 +45,7 @@ public class kpi {
|
|||||||
public static int PRIORITY_IDX = 6;
|
public static int PRIORITY_IDX = 6;
|
||||||
public static int TEST_ID_IDX = 7;
|
public static int TEST_ID_IDX = 7;
|
||||||
public static int SHORT_DESC_IDX = 8;
|
public static int SHORT_DESC_IDX = 8;
|
||||||
public static int PASS_FAIL_IDX = 8;
|
public static int PASS_FAIL_IDX = 9;
|
||||||
public static int NUMERIC_SCORE_IDX = 10;
|
public static int NUMERIC_SCORE_IDX = 10;
|
||||||
public static int NOTES_IDX = 11;
|
public static int NOTES_IDX = 11;
|
||||||
public static int UNITS_IDX = 12;
|
public static int UNITS_IDX = 12;
|
||||||
@@ -121,6 +121,8 @@ public class kpi {
|
|||||||
String dir = null;
|
String dir = null;
|
||||||
String results_url = "";
|
String results_url = "";
|
||||||
String caseid = "";
|
String caseid = "";
|
||||||
|
String slack_fname = "";
|
||||||
|
String testbed_name = "LANforge CICD";
|
||||||
|
|
||||||
for (int i = 0; i<args.length; i++) {
|
for (int i = 0; i<args.length; i++) {
|
||||||
if (args[i].equals("--dir")) {
|
if (args[i].equals("--dir")) {
|
||||||
@@ -132,8 +134,18 @@ public class kpi {
|
|||||||
else if (args[i].equals("--results_url")) {
|
else if (args[i].equals("--results_url")) {
|
||||||
results_url = args[i+1];
|
results_url = args[i+1];
|
||||||
}
|
}
|
||||||
|
else if (args[i].equals("--slack_fname")) {
|
||||||
|
slack_fname = args[i+1];
|
||||||
|
}
|
||||||
|
else if (args[i].equals("--testbed_name")) {
|
||||||
|
testbed_name = args[i+1];
|
||||||
|
}
|
||||||
else if (args[i].equals("--help") || args[i].equals("-h") || args[i].equals("-?")) {
|
else if (args[i].equals("--help") || args[i].equals("-h") || args[i].equals("-?")) {
|
||||||
System.out.println("Usage: $0 --dir /path/to/test-collection");
|
System.out.println("Usage: $0 --dir /path/to/test-collection\n" +
|
||||||
|
"--caseid [case-id]\n" +
|
||||||
|
"--results_url [url]\n" +
|
||||||
|
"--slack_fname [slack url webhook file name]\n" +
|
||||||
|
"--testbed_name [My Testbed]");
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -149,16 +161,17 @@ public class kpi {
|
|||||||
DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(dir));
|
DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(dir));
|
||||||
for (Path file: stream) {
|
for (Path file: stream) {
|
||||||
File f = file.toFile(); // this is the test run dir
|
File f = file.toFile(); // this is the test run dir
|
||||||
//System.out.println("Checking sub-directory/file (run): " + f.getAbsolutePath());
|
|
||||||
// Inside of it is individual tests.
|
// Inside of it is individual tests.
|
||||||
if (!f.isDirectory()) {
|
if (!f.isDirectory()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//System.out.println("Checking sub-directory/file (run): " + f.getAbsolutePath());
|
||||||
DirectoryStream<Path> stream2 = Files.newDirectoryStream(file);
|
DirectoryStream<Path> stream2 = Files.newDirectoryStream(file);
|
||||||
Run run = null;
|
Run run = null;
|
||||||
|
|
||||||
for (Path file2: stream2) {
|
for (Path file2: stream2) {
|
||||||
File f2 = file2.toFile(); // this is the test case dir in the test run
|
File f2 = file2.toFile(); // this is the test case dir in the test run
|
||||||
|
//System.out.println("Checking test-case directory/file: " + f2.getAbsolutePath());
|
||||||
// Directory full of test results?
|
// Directory full of test results?
|
||||||
if (f2.isDirectory()) {
|
if (f2.isDirectory()) {
|
||||||
DirectoryStream<Path> stream3 = Files.newDirectoryStream(file2);
|
DirectoryStream<Path> stream3 = Files.newDirectoryStream(file2);
|
||||||
@@ -617,7 +630,7 @@ public class kpi {
|
|||||||
bw.write(System.lineSeparator());
|
bw.write(System.lineSeparator());
|
||||||
bw.write(testrails_msg);
|
bw.write(testrails_msg);
|
||||||
bw.write(System.lineSeparator());
|
bw.write(System.lineSeparator());
|
||||||
bw.write("MSG URL: " + results_url);
|
bw.write("MSG URL: " + results_url + "/" + run.getName());
|
||||||
bw.write(System.lineSeparator());
|
bw.write(System.lineSeparator());
|
||||||
|
|
||||||
bw.close();
|
bw.close();
|
||||||
@@ -628,6 +641,35 @@ public class kpi {
|
|||||||
eee.printStackTrace();
|
eee.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!slack_fname.equals("")) {
|
||||||
|
String slack_content_type = "Content-type: application/json";
|
||||||
|
String slack_msg = "{\"text\":\"<" + results_url + "|" + testbed_name + ">"
|
||||||
|
+ " Results: <" + results_url + "/" + run.getName() + "|" + run.getName() + ">"
|
||||||
|
+ " Errors: " + (run.getLogCrashes() + run.getLogRestarting() + run.getLogBugs()) + " Warnings: " + run.getLogWarnings()
|
||||||
|
+ "\"}";
|
||||||
|
try {
|
||||||
|
BufferedReader br = new BufferedReader(new FileReader(slack_fname));
|
||||||
|
String slack = br.readLine();
|
||||||
|
String cmd = "curl -X POST -H '" + slack_content_type + "' --data '" + slack_msg + "' " + slack;
|
||||||
|
System.out.println(cmd);
|
||||||
|
|
||||||
|
ShellExec exec = new ShellExec(true, true);
|
||||||
|
int rv = exec.execute("curl", null, true,
|
||||||
|
"-X", "POST",
|
||||||
|
"-H", slack_content_type,
|
||||||
|
"--data", slack_msg, slack);
|
||||||
|
if (rv != 0) {
|
||||||
|
System.out.println("curl slack post of msg: " + slack_msg + " to: " + slack + " failed.\n");
|
||||||
|
System.out.println(exec.getOutput());
|
||||||
|
System.out.println(exec.getError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception eeee) {
|
||||||
|
System.out.println("slack_msg: " + slack_msg + " slack_fname: " + slack_fname);
|
||||||
|
eeee.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
runs_rows.append(row_text);
|
runs_rows.append(row_text);
|
||||||
|
|||||||
Reference in New Issue
Block a user