Subversion Repositories havirt

Rev

Rev 20 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#!/usr/bin/env perl

# All functions related to maniplating/reporting on cluster
# part of havirt.

# Copyright 2024 Daily Data, Inc.
# 
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following 
# conditions are met:
#
#   Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
#   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer 
#   in the documentation and/or other materials provided with the distribution.
#   Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived
#   from this software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
# NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# v0.0.1 20240602 RWR
# Initial setup

package cluster;

use warnings;
use strict;  

# define the version number
# see https://metacpan.org/pod/release/JPEACOCK/version-0.97/lib/version.pod
use version;
our $VERSION = version->declare("1.0.0");


use Data::Dumper;

use Exporter;

our @ISA = qw( Exporter );
our @EXPORT = qw( 
                  &list
                );

sub help {
   my @return;
   push @return, 'cluster status';
   push @return, "\t[--format|-f screen|tsv] - displays some stats on cluster resources used";
   return join( "\n", @return ) . "\n";
}

sub status {
   my $return = '';
   &main::readDB();
   my @header = ('Node','Threads','Memory','Domains','vcpu','mem_used' );
   my @data;
   my $usedmem = 0;
   my $usedcpu = 0;
   my $availmem = 0;
   my $availcpu = 0;
   my $totalDomains = 0;
   foreach my $node (sort keys %{ $main::statusDB->{'node'} } ) {
      my $memory = 0;
      my $vcpus = 0;
      my $count = 0;
      foreach my $domain ( keys %{ $main::statusDB->{'nodePopulation'}->{$node}->{'running'} } ) {
         $memory += $main::statusDB->{'virt'}->{$domain}->{'memory'};
         $vcpus += $main::statusDB->{'virt'}->{$domain}->{'vcpu'};
         $count++;
      }
      push @data, [ $node,$main::statusDB->{'node'}->{$node}->{cpu_count},$main::statusDB->{'node'}->{$node}->{memory},$count,$vcpus,$memory ];
      $usedmem += $memory;
      $usedcpu += $vcpus;
      $totalDomains += $count;
      $availmem += $main::statusDB->{'node'}->{$node}->{memory};
      $availcpu += $main::statusDB->{'node'}->{$node}->{cpu_count};
   } # outer for
   push @data, [ 'Total',$availcpu,$availmem,$totalDomains,$usedcpu,$usedmem ];
   return &main::report( \@header, \@data );
}