blob: e186f0992201ab57ac20b5fcfef6bc16acfb0eb4 [file] [log] [blame]
BjornMagnussonXA6fc58fd2021-11-18 08:19:45 +01001#!/bin/bash
2
3# ============LICENSE_START===============================================
4# Copyright (C) 2020 Nordix Foundation. All rights reserved.
5# ========================================================================
6# Licensed under the Apache License, Version 2.0 (the "License");
7# you may not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17# ============LICENSE_END=================================================
18#
19
20# This script collects container statistics to a file. Data is separated with semicolon.
21# Works for both docker container and kubernetes pods.
22# Relies on 'docker stats' so will not work for other container runtimes.
23# Used by the test env.
24
25# args: docker <start-time-seconds> <log-file> <app-short-name> <app-name> [ <app-short-name> <app-name> ]*
26# or
27# args: kube <start-time-seconds> <log-file> <app-short-name> <app-name> <namespace> [ <app-short-name> <app-name> <namespace> ]*
28
29print_usage() {
30 echo "Usage: genstat.sh DOCKER <start-time-seconds> <log-file> <app-short-name> <app-name> [ <app-short-name> <app-name> ]*"
31 echo "or"
32 echo "Usage: genstat.sh KUBE <start-time-seconds> <log-file> <app-short-name> <app-name> <namespace> [ <app-short-name> <app-name> <namespace> ]*"
33}
BjornMagnussonXA6fc58fd2021-11-18 08:19:45 +010034STARTTIME=-1
35
36if [ $# -lt 4 ]; then
37 print_usage
38 exit 1
39fi
40if [ $1 == "DOCKER" ]; then
41 STAT_TYPE=$1
42 shift
43 STARTTIME=$1
44 shift
45 LOGFILE=$1
46 shift
47 if [ $(($#%2)) -ne 0 ]; then
48 print_usage
49 exit 1
50 fi
51elif [ $1 == "KUBE" ]; then
52 STAT_TYPE=$1
53 shift
54 STARTTIME=$1
55 shift
56 LOGFILE=$1
57 shift
58 if [ $(($#%3)) -ne 0 ]; then
59 print_usage
60 exit 1
61 fi
62else
63 print_usage
64 exit 1
65fi
66
67
BjornMagnussonXA79e37002021-11-22 13:36:04 +010068echo "Name;Time;PIDS;CPU perc;Mem perc" > $LOGFILE
BjornMagnussonXA6fc58fd2021-11-18 08:19:45 +010069
70if [ "$STARTTIME" -ne -1 ]; then
71 STARTTIME=$(($SECONDS-$STARTTIME))
72fi
73
74while [ true ]; do
75 docker stats --no-stream --format "table {{.Name}};{{.PIDs}};{{.CPUPerc}};{{.MemPerc}}" > tmp/.tmp_stat_out.txt
76 if [ "$STARTTIME" -eq -1 ]; then
77 STARTTIME=$SECONDS
78 fi
79 CTIME=$(($SECONDS-$STARTTIME))
80
81 TMP_APPS=""
82
83 while read -r line; do
84 APP_LIST=(${@})
85 if [ $STAT_TYPE == "DOCKER" ]; then
86 for ((i=0; i<$#; i=i+2)); do
87 SAPP=${APP_LIST[$i]}
88 APP=${APP_LIST[$i+1]}
89 d=$(echo $line | grep -v "k8s" | grep $APP)
90 if [ ! -z $d ]; then
91 d=$(echo $d | cut -d';' -f 2- | sed -e 's/%//g' | sed 's/\./,/g')
92 echo "$SAPP;$CTIME;$d" >> $LOGFILE
93 TMP_APPS=$TMP_APPS" $SAPP "
94 fi
95 done
96 else
97 for ((i=0; i<$#; i=i+3)); do
98 SAPP=${APP_LIST[$i]}
99 APP=${APP_LIST[$i+1]}
100 NS=${APP_LIST[$i+2]}
101 d=$(echo "$line" | grep -v "k8s_POD" | grep "k8s" | grep $APP | grep $NS)
102 if [ ! -z "$d" ]; then
103 d=$(echo "$d" | cut -d';' -f 2- | sed -e 's/%//g' | sed 's/\./,/g')
104 data="$SAPP-$NS;$CTIME;$d"
105 echo $data >> $LOGFILE
106 TMP_APPS=$TMP_APPS" $SAPP-$NS "
107 fi
108 done
109 fi
110 done < tmp/.tmp_stat_out.txt
111
112 APP_LIST=(${@})
113 if [ $STAT_TYPE == "DOCKER" ]; then
114 for ((i=0; i<$#; i=i+2)); do
115 SAPP=${APP_LIST[$i]}
116 APP=${APP_LIST[$i+1]}
117 if [[ $TMP_APPS != *" $SAPP "* ]]; then
118 data="$SAPP;$CTIME;0;0,00;0,00"
119 echo $data >> $LOGFILE
120 fi
121 done
122 else
123 for ((i=0; i<$#; i=i+3)); do
124 SAPP=${APP_LIST[$i]}
125 APP=${APP_LIST[$i+1]}
126 NS=${APP_LIST[$i+2]}
127 if [[ $TMP_APPS != *" $SAPP-$NS "* ]]; then
128 data="$SAPP-$NS;$CTIME;0;0,00;0,00"
129 echo $data >> $LOGFILE
130 fi
131 done
132 fi
133 sleep 1
134done