View unanswered posts | View active topics It is currently Wed Aug 15, 2018 7:18 am



Reply to topic  [ 1 post ] 
 fit-statUSB: Perl App for Displaying Memory Usage 
Author Message

Joined: Mon May 28, 2012 12:25 pm
Posts: 104
Post fit-statUSB: Perl App for Displaying Memory Usage
Overview

System performance is often negatively impacted by having inadequate available memory. This is especially true when HDD virtual memory comes into play, or when poorly written software products don't properly release unused memory back to the system. Even older non-state of the art systems can often enjoy a performance boost when available system memory is increased either by adding ram or by using installed ram more efficiently.

Consequently, it is important to monitor memory usage, especially when poor system performance is encountered. The following perl app provides a simple visual method for monitoring memory usage via the brightness of fit-statUSB. The brighter fit-statUSB appears the higher the level of ram usage.



Examples

App Initialization : Maximum Brightness
Attachment:
InitializeMem.jpeg
InitializeMem.jpeg [ 22.39 KiB | Viewed 33 times ]



Low Memory Usage: Dim fit-statUSB
Attachment:
LowMem.jpeg
LowMem.jpeg [ 20.21 KiB | Viewed 33 times ]



Medium Memory Usage: Moderately Bright fit-statUSB
Attachment:
MedMem.jpeg
MedMem.jpeg [ 22.95 KiB | Viewed 33 times ]





Perl App Listing

#!/usr/bin/perl -w
#
#fitletMemUse.pl

# Darryl Hassell 8/7/2018

use Tk;
use List::MoreUtils qw(first_index);
use Device::SerialPort;
use Time::HiRes ('sleep');

# Define & Initialize Variables

my $Mem_Use_Percent = 'Testing';
my $Mem_Used = 0;
my $Mem_Total = 1;
our $Mem_Use_BrightColor_Hex_fit = '#0000FF';
our $Mem_Use_BrightColor_Hex_screen = '#0000FF';
my $Bright_Dec_fit = 255;
my $Bright_Dec_scrren = 255;
my $Bright_Hex_fit = FF;
my $Bright_Hex_screen = FF;

# Configure Serial Port
my $port = Device::SerialPort -> new("/dev/ttyACM0");
$port -> baudrate(115200);
$port -> databits(8);
$port -> parity("none");
$port -> stopbits(1);
$port -> write_settings;

# Set Sleep Delay After Writes in Seconds
our $delay = 0.1;

# Initialize fit-statUSB to Max Brightness Red
$port -> write("#0000FF\n");
$port -> purge_rx;

# Create Main Window
$WinMain = MainWindow->new;
$WinMain -> resizable (0,0);

# Label Main Window
$myframe = $WinMain -> Frame ->pack();
$Mem_Use_Label = $myframe -> Label (-text => 'fitlet Memory Use Monitor'."\n"."$Mem_Use_Percent".' % ', -background => "$Mem_Use_BrightColor_Hex_screen", -foreground => "white", -font => "helvetica 9 bold")->pack(-ipadx => 20,-ipady => 20);


# Exit Program Button
$stopbutton = $myframe -> Button (-text => 'Exit', -command => \&Exit, -foreground => 'black', -background => 'lightblue');
$stopbutton -> pack (-side => 'bottom');


$WinMain -> repeat(2000, \&GetMemUse);

MainLoop();

################################ Exit Program ################################

sub Exit {

$port -> write("#000000\n");
$port -> purge_rx;
sleep($delay);
exit;
}

################################ Memory Usage Data ################################

sub GetMemUse {

$Mem_Use_Unfiltered1 = `free`;

# Read Unfiltered Memory Usage Data Into Array
@Mem_Use_Array1 = split ' ', $Mem_Use_Unfiltered1;

# Determine Array Index of String Mem:
my $ArrayIndexTotal1 = first_index { $_ eq 'Mem:' } @Mem_Use_Array1;

# Determine Array Index of Total Memory
my $ArrayIndexTotal2 = $ArrayIndexTotal1 + 1;

# Read Total Memory Out Of Array
$Mem_Total = $Mem_Use_Array1[$ArrayIndexTotal2];

# Determine Array Index of String buffers/cache:
my $ArrayIndexUsed1 = first_index { $_ eq 'buffers/cache:' } @Mem_Use_Array1;

# Determine Array Index of Memory Used
my $ArrayIndexUsed2 = $ArrayIndexUsed1 + 1;

# Read Memory Used Out Of Array
$Mem_Used = $Mem_Use_Array1[$ArrayIndexUsed2];

# Calculate Memory Usage Percentage Rounded to 1 Decimal Place
$Mem_Use_Percent = sprintf("%.1f",($Mem_Used/$Mem_Total)*100);

# Calculate Decimal fit-statUSB Brightness from 0 to 255
$Bright_Dec_fit = sprintf("%.0f",($Mem_Used/$Mem_Total)*255);

#Convert Decimal fit-statUSB Brightness to Hexidecimal
$Bright_Hex_fit = sprintf("%X", $Bright_Dec_fit);

# Generate fit-statUSB Color and Brightness Hex String
$Mem_Use_BrightColor_Hex_fit = '#'.'00'.'00'.$Bright_Hex_fit;

# Calculate Decimal Screen Window Brightness from 175 to 255
$Bright_Dec_screen = sprintf("%.0f",175 + ($Mem_Used/$Mem_Total)*80);

#Convert Decimal Screen Window Brightness to Hexidecimal
$Bright_Hex_screen = sprintf("%X", $Bright_Dec_screen);

# Generate fit-statUSB Color and Brightness Hex String
$Mem_Use_BrightColor_Hex_fit = '#'.'00'.'00'.$Bright_Hex_fit;

# Generate Screen Window Color and Brightness Hex String
$Mem_Use_BrightColor_Hex_screen = '#'.'00'.'00'.$Bright_Hex_screen;


# Send Color and Brightness to fit-statUSB
$port -> write("$Mem_Use_BrightColor_Hex_fit\n");
$port -> purge_rx;

# Prints of Values For Debugging
# print("$Bright_Dec\n");
# print("$Bright_Hex\n");
# print("$Mem_Use_BrightColor_Hex\n");
# print("\n");

$Mem_Use_Label -> configure (-text => 'fitlet Memory Use Monitor'."\n"."$Mem_Use_Percent".' % Used ', -background => "$Mem_Use_BrightColor_Hex_screen");

}




Conclusions

fit-statUSB provides a very usable visual indication of the memory usage of a system. fit-statUSB and its host fitlet RM system comprise a very versatile combination.


Wed Aug 08, 2018 2:37 am
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 1 post ] 

Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF.