]> arthur.barton.de Git - netdata.git/blob - plugins.d/cgroup-name.sh
Merge remote-tracking branch 'firehol/master'
[netdata.git] / plugins.d / cgroup-name.sh
1 #!/usr/bin/env bash
2
3 export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/sbin"
4 export LC_ALL=C
5
6 NETDATA_CONFIG_DIR="${NETDATA_CONFIG_DIR-/etc/netdata}"
7 CONFIG="${NETDATA_CONFIG_DIR}/cgroups-names.conf"
8 CGROUP="${1}"
9 NAME=
10
11 if [ -z "${CGROUP}" ]
12     then
13     echo >&2 "${0}: called without a cgroup name. Nothing to do."
14     exit 1
15 fi
16
17 if [ -f "${CONFIG}" ]
18     then
19     NAME="$(grep "^${CGROUP} " "${CONFIG}" | sed "s/[[:space:]]\+/ /g" | cut -d ' ' -f 2)"
20     if [ -z "${NAME}" ]
21         then
22         echo >&2 "${0}: cannot find cgroup '${CGROUP}' in '${CONFIG}'."
23     fi
24 #else
25 #   echo >&2 "${0}: configuration file '${CONFIG}' is not available."
26 fi
27
28 function get_name_classic {
29     local DOCKERID="$1"
30     echo >&2 "Running command: docker ps --filter=id=\"${DOCKERID}\" --format=\"{{.Names}}\""
31     NAME="$( docker ps --filter=id="${DOCKERID}" --format="{{.Names}}" )"
32     return 0
33 }
34
35 function get_name_api {
36     local DOCKERID="$1"
37     if [ ! -S "/var/run/docker.sock" ]
38         then
39         echo >&2 "Can't find /var/run/docker.sock"
40         return 1
41     fi
42     echo >&2 "Running API command: /containers/${DOCKERID}/json"
43     JSON=$(echo -e "GET /containers/${DOCKERID}/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock | egrep '^{.*')
44     NAME=$(echo $JSON | jq -r .Name,.Config.Hostname | grep -v null | head -n1 | sed 's|^/||')
45     return 0
46 }
47
48 if [ -z "${NAME}" ]
49     then
50     if [[ "${CGROUP}" =~ ^.*docker[-_/\.][a-fA-F0-9]+[-_\.]?.*$ ]]
51         then
52         DOCKERID="$( echo "${CGROUP}" | sed "s|^.*docker[-_/]\([a-fA-F0-9]\+\)[-_\.]\?.*$|\1|" )"
53         # echo "DOCKERID=${DOCKERID}"
54
55         if [ ! -z "${DOCKERID}" -a \( ${#DOCKERID} -eq 64 -o ${#DOCKERID} -eq 12 \) ]
56             then
57             if hash docker 2>/dev/null
58                 then
59                 get_name_classic $DOCKERID
60             else
61                 get_name_api $DOCKERID || get_name_classic $DOCKERID
62             fi
63             if [ -z "${NAME}" ]
64                 then
65                 echo >&2 "Cannot find the name of docker container '${DOCKERID}'"
66                 NAME="${DOCKERID:0:12}"
67             else
68                 echo >&2 "Docker container '${DOCKERID}' is named '${NAME}'"
69             fi
70         fi
71     fi
72
73     [ -z "${NAME}" ] && NAME="${CGROUP}"
74     [ ${#NAME} -gt 50 ] && NAME="${NAME:0:50}"
75 fi
76
77 echo >&2 "${0}: cgroup '${CGROUP}' is called '${NAME}'"
78 echo "${NAME}"