#!/bin/bash

# OSM devops/tools - Tool that generates a report for debugging
#
# Copyright 2018 Telefonica
#
# 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.

DIRNAME=$(readlink -f ${BASH_SOURCE[0]})
DIRNAME=$(dirname $DIRNAME)

#Get versions
echo "-------------------------------"
echo "Versions"
echo "-------------------------------"
echo "DIRNAME: $DIRNAME"
echo "docker version:"
docker version
echo "lxd version:"
lxd --version
echo "juju version:"
juju --version
echo "osm-devops deb package:"
dpkg -l |grep osm-devops
echo "osm-imdocs osm-im deb package:"
dpkg -l |grep osm-im
echo "python-osmclient deb package:"
dpkg -l |grep
echo "whereis osm:"
whereis osm
echo "which osmclient:"
which osm
#dockers deb packages
echo "dockers deb packages"
for i in kafka keystone lcm mon mongo nbi pol prometheus ro mysql zookeeper; do
    echo "docker osm_$i"
    docker exec $(docker ps -q -f name=osm_$i -l) dpkg -l |grep osm
done
#dockers source code
echo "dockers deb packages"
echo "MON"
docker exec -it $(docker ps -aqf "name=osm_mon" -n 1) dpkg -l |egrep -i "osm|n2vc"
echo "POL"
docker exec -it $(docker ps -aqf "name=osm_pol" -n 1) dpkg -l |egrep -i "osm|n2vc"
echo "LCM"
docker exec -it $(docker ps -aqf "name=osm_lcm" -n 1) dpkg -l |egrep -i "osm|n2vc"
echo "NBI"
docker exec -it $(docker ps -aqf "name=osm_nbi" -n 1) dpkg -l |egrep -i "osm|n2vc"
echo "RO"
docker exec -it $(docker ps -aqf "name=osm_ro.1" -n 1) dpkg -l |egrep -i "osm|n2vc"
echo "OSMCLIENT"
dpkg -l |grep osmclient
echo "OSM-IM"
dpkg -l |grep osm-im
echo "OSM-DEVOPS"
dpkg -l |grep osm-devops

echo "docker osm_ro"
docker exec $(docker ps -q -f name=osm_ro -l) git -C /root/RO rev-parse HEAD
docker exec $(docker ps -q -f name=osm_ro -l) git -C /root/RO describe --tags --long --dirty
echo "docker osm_lcm"
docker exec $(docker ps -q -f name=osm_lcm -l) git -C /app rev-parse HEAD
docker exec $(docker ps -q -f name=osm_lcm -l) git -C /app describe --tags --long --dirty
echo "docker osm_nbi"
docker exec $(docker ps -q -f name=osm_nbi -l) git -C /app/NBI rev-parse HEAD
docker exec $(docker ps -q -f name=osm_nbi -l) git -C /app/NBI describe --tags --long --dirty
echo "docker osm_mon"
docker exec $(docker ps -q -f name=osm_mon -l) git -C /mon rev-parse HEAD
docker exec $(docker ps -q -f name=osm_mon -l) git -C /mon describe --tags --long --dirty
echo "docker osm_pol"
docker exec $(docker ps -q -f name=osm_pol -l) git -C /policy_module rev-parse HEAD
docker exec $(docker ps -q -f name=osm_pol -l) git -C /policy_module describe --tags --long --dirty

#Get configuration files
echo "-------------------------------"
echo "Configuration files"
echo "-------------------------------"
for i in $(find /etc/osm -type f -exec echo {} \;); do
    [ -f "$i" ] || continue
    echo "File $i:"
    cat $i
done

#Get status of docker swarm
echo "-------------------------------"
echo "Docker swarm status"
echo "-------------------------------"
echo "Node ls:"
docker node ls
echo "Node inspect self:"
docker node inspect self --pretty
echo "Network inspect docker_gwbridge:"
docker network inspect docker_gwbridge
echo "Network inspect netOSM:"
docker network inspect netOSM
echo "Network inspect netosm:"
docker network inspect netosm

#Get status of dockers
echo "-------------------------------"
echo "Docker status"
echo "-------------------------------"
echo "-------------------------------"
echo "Docker stack ls"
echo "-------------------------------"
docker stack ls
echo "-------------------------------"
echo "Docker service ls"
echo "-------------------------------"
docker service ls
for i in $(docker stack ps |tail -n +2|awk '{print $1}'); do
    echo "-------------------------------"
    echo "Docker stack $i"
    echo "-------------------------------"
    docker stack ps $i
done

#Get log files
echo
echo "-------------------------------"
echo "Log files"
echo "-------------------------------"
echo "To be added"

#Get OSM general info
echo "-------------------------------"
echo "OSM info"
echo "-------------------------------"
for i in vim-list sdnc-list vnfd-list nsd-list ns-list vnf-list; do
    echo "-------------------------------"
    echo "OSM info: $i"
    echo "-------------------------------"
    osm $i
done

#Get OSM details
echo "-------------------------------"
echo "OSM details"
echo "-------------------------------"
for i in vim sdnc vnfd nsd ns; do
    echo "-------------------------------"
    echo "OSM details: $i"
    echo "-------------------------------"
    for j in $(osm $i-list|tail -n +4|awk '{print $4}'); do
        echo "-------------------------------"
        echo "OSM details: vim $j"
        echo "-------------------------------"
        osm $i-show $j
    done
done
for i in vnf; do
    echo "-------------------------------"
    echo "OSM details: $i"
    echo "-------------------------------"
    for j in $(osm $i-list|tail -n +4|awk '{print $2}'); do
        echo "-------------------------------"
        echo "OSM details: vim $j"
        echo "-------------------------------"
        osm $i-show $j
    done
done

