#!/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 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 "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

#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

