File: Videos.pm

package info (click to toggle)
ocsinventory-agent 2%3A2.10.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,424 kB
  • sloc: perl: 26,492; xml: 773; objc: 528; sh: 386; ansic: 333; makefile: 12
file content (57 lines) | stat: -rw-r--r-- 1,917 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package Ocsinventory::Agent::Backend::OS::Linux::Videos;

use strict;
use warnings;

sub check {
    my $params = shift;
    my $common = $params->{common};
    return unless $common->can_run ("nvidia-smi");
    return unless $common->can_run ("nvidia-settings");
}

sub run {

    my $params = shift;
    my $common = $params->{common};
    my $logger = $params->{logger};

    my $nvidia;
    my @nvidia_infos=`nvidia-smi -q`;
    my @nvidia_settings=`nvidia-settings -q all`;
    my @prime=`nvidia-settings --query=PrimeOutputsData`;
    
    foreach my $info (@nvidia_infos) {
        $nvidia->{SERIALNUMBER}=$1 if ($info =~ /Serial Number\s+: (.*)/i);
        $nvidia->{DRVVERSION}=$1 if ($info =~ /Driver Version\s+: ([0-9]+\.[0-9]+)/i);
        $nvidia->{NBGPU}=$1 if ($info =~ /Attached GPUs\s+: ([0-9])/i);
        $nvidia->{VBIOS}=$1 if ($info =~ /VBIOS Version\s+: (.*)/i);
        $nvidia->{NAME}=$1 if ($info =~ /Product Name\s+:(.*)/i);
        $nvidia->{UUID}=$1 if ($info =~ /GPU UUID\s+:(.*)/i);
        $nvidia->{PCISLOT}=$1 if ($info =~ /Bus Id\s+:(.*)/i);
    }

    # Resolution 
    foreach my $inf (@prime) {
        next if ($inf =~ /^\s*$/);
        my $width=$1 if ($inf =~ /width=(\d{1,4})/);
        my $height=$1 if ($inf =~ /height=(\d{1,4})/);
        $nvidia->{RESOLUTION}=$width."x".$height;
    }

    $nvidia->{MEMORY}=`nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits`;
    $nvidia->{MEMORY} =~ s/\s+$//g;
    $nvidia->{NAME} =~ s/^\s//g;
    $nvidia->{UUID} =~ s/^\s//g;
    $nvidia->{PCISLOT} =~ s/^\s0{8}://g;
    foreach my $settings (@nvidia_settings) {
        $nvidia->{DATA_WIDTH}=$1 if ($settings =~ /Attribute \'GPUMemoryInterface\'\s\(.*\):\s(\d{2})./i);
        $nvidia->{CUDACORES}=$1 if ($settings =~ /Attribute \'CUDACores\'\s\(.*\):\s(\d{2})./i);
    }

    for (my $i=0; $i<$nvidia->{NBGPU};$i++) {
        $common->addVideo($nvidia);
    }
}

1;