User Tools

Site Tools


unix:chromeos:systemreport

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
unix:chromeos:systemreport [2023/07/04 15:29] – created rodolicounix:chromeos:systemreport [2023/07/04 17:06] (current) rodolico
Line 18: Line 18:
   - Save as your_nameChrome.pdf (ie, RodChrome.pdf)   - Save as your_nameChrome.pdf (ie, RodChrome.pdf)
  
-You now have two large files in your downloads folder, and mhtml file and a PDF. The following Perl script parses the mhtml file, using ====CATEGORY==== as headers, with the contents afterwards. I have written it to NOT include the logs. Use the command: +You now have two large files in your downloads folder, and mhtml file and a PDF. The following Perl script parses the mhtml file, using ====CATEGORY==== as headers, with the contents afterwards. I have written it to NOT include the logs.
-<code bash>./parseChrome.pl < your_name_Chrome.mthml > your_nameChrome.txt</code>+
  
 +Note: The mhtml output uses Windows line endings, so if you're running this on a Unix machine, you'll want to run it through tr to get convert it to Unix line endings.
  
 +Use the command:
 +<code bash>tr -d '\r' < filename | perl processChrome.pl > filename.txt</code>
 +
 +<code perl processChrome.pl>
 +#! /usr/bin/env perl
 +
 +use strict;
 +use warnings;
 +
 +# tr -d '\r' < filename | ./processChrome.pl
 +
 +# anything matching these keys will be include, and all else
 +# will be excluded. If empty, will include everything not
 +# matching $ignoreKeys. In this case, we've commented out
 +# everything, so it will output everything not ignored
 +my %lookFor = ( 
 +#   'div-bios-info-value' => 'bios_info',
 +#   'div-blkid-value' => 'blkid',
 +#   'div-cpuinfo-value' => 'cpuinfo',
 +#   'div-disk-usage-value' => 'disk_usage',
 +#   'div-ifconfig-value' => 'ifconfig',
 +#   'div-lsblk-value' => 'lsblk',
 +#   'div-meminfo-value' => 'meminfo',
 +#   'div-network-devices-value' => 'network_devices',
 +#   'div-os-release-NAME-value' => 'os-release NAME',
 +#   'div-os-release-VERSION-value' => 'os-release VERSION',
 +#   'div-uname-value' => 'uname',
 +#   'div-vpd-2-0-value' => 'vpd_2.0'
 +);
 +
 +# anything matching this regex will be ignored
 +# this matches anything with log, profile or ui-heirarchy in 
 +# the key. NOTE: match is case insensitive
 +my $ignoreRegex = qr'.*(log)|(profile)|(ui-hierarchy).*'i;
 +
 +
 +# get a single line. This is more difficult since the output
 +# takes very long lines and separates them into 80 column blocks
 +# the indicator for this continuation is an equals sign (=)
 +# at the end of the line. Thus, we continue to read lines from
 +# STDIN so long as the current line ends with an equal sign
 +# and we concatinate all of the lines together
 +sub getLine {
 +   my @lines;
 +   while ( my $thisLine = <> ) {
 +      chomp $thisLine;
 +      if ( substr( $thisLine, -1 ) eq '=' ) {
 +         #die "$thisLine\n";
 +         chop $thisLine; # remove the equals sign
 +         push @lines, $thisLine;
 +      } else {
 +         push @lines, $thisLine;
 +         #print "returning\n$thisLine\n";
 +         return join( '', @lines ) . "\n";
 +      }
 +   }
 +}
 +
 +# makes a category name from the div name
 +sub makeCategory {
 +   my $initValue = shift;
 +   $initValue =~ m/div-(.*)-value/;
 +   $initValue = $1;
 +   $initValue =~ s/-/ /g;
 +   return $initValue;
 +}
 +
 +
 +my %found;
 +my $line;
 +my $count = 100;
 +my $category = '';
 +while ( $line = &getLine() ) {
 +   #print "$line\n";
 +   #die unless $count--;
 +   $line =~ s/=3D/=/gi;
 +   # Ok, if we have a category already, and have found a </div>, clear the category
 +   $category = '' if $category && $line =~ m"</div>";
 +   # check for a line like <div id="div-something-value"> and begin processing if found
 +   # $matches[0] has the key name (ie, something), and $matches[1] has any subsequent
 +   # information, generally the beginning of the actual block
 +   if ( my @matches = ($line =~ m/^.*<div.*id="(div-[^"]+-value)">(.*)$/ ) ) {
 +#      print "Found div $matches[0]\n";
 +      # skip if $ignoreRegex defined has matches. Note, this is case insensitive
 +#      die "Checking $matches[0]\nagainst\n$ignoreRegex\n";
 +      next if $ignoreRegex && $matches[0] =~ m/.*($ignoreRegex).*/;
 +      # if %lookFor empty, or not empty and has matching key, inlcude it
 +      if ( ! %lookFor || $lookFor{$matches[0]} ) {
 +         # Create the category
 +         $category = defined( $lookFor{$matches[0]} ) ? $lookFor{$matches[0]} : &makeCategory( $matches[0] ) ;
 +         # include any information beginning the div
 +         $found{$category} = $matches[1] . "\n";
 +      }
 +   } elsif ( $category ) {
 +      # we're in the middle of a div, so just add the line.
 +      $found{$category} .= $line;
 +   }
 +}
 +
 +foreach my $key ( sort keys %found ) {
 +   print "\n====$key====\n" . $found{$key} . "\n";
 +}
 +
 +1;
 +
 +</code>
unix/chromeos/systemreport.1688502598.txt.gz · Last modified: 2023/07/04 15:29 by rodolico