#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Std;
use English;
use POSIX;
use Data::Dumper;

#
# A simple CLI wrapper around libvnode_docker::analyzeImage.
#
sub usage()
{
    print "Usage: analyze-image [-d <level>] [-f] <image>\n".
	  "\n".
          "  -d <level>  Debug mode\n".
	  "  -f          Analyze the image even if it has already been done\n";
    exit(1);
}
my $optlist = "hd:f";
my $debug = 0;
my $force = 0;

#
# Parse command arguments. Once we return from getopts, all that should be
# left are the required arguments.
#
my %options = ();
if (!getopts($optlist,\%options)) {
    usage();
}
if (defined($options{"h"})) {
    usage();
}
if (defined($options{"d"})) {
    $debug = $options{"d"};
}
if (defined($options{"f"})) {
    $force = 1;
}
usage()
    if (@ARGV > 1);

#
# Must be root.
# 
if ($UID != 0) {
    die("*** $0:\n".
	"    Must be root to run this script!\n");
}

#
# Turn off line buffering on output
#
$| = 1;

# Drag in path stuff so we can find emulab stuff.
BEGIN { require "/etc/emulab/paths.pm"; import emulabpaths; }

use libsetup;
use libvnode_docker;

if ($debug) {
    TBDebugTimeStampsOn();
    libvnode_docker::setDebug($debug);
}
my %rethash = ();
my $image = $ARGV[0];
my $rc = libvnode_docker::analyzeImage($image,\%rethash,$force);
if ($rc) {
    fatal("ERROR: failed to analyze $image!\n");
}
else {
    print "Successfully analyzed $image:\n";
    for my $k (keys(%rethash)) {
	my $v = '';
	if (defined($rethash{$k})) {
	    $v = $rethash{$k};
	}
	print "$k=$v\n";
    }
}
exit(0);
