Recent

Author Topic: Disk status snip for Raspios linux.  (Read 838 times)

pascalbythree

  • Sr. Member
  • ****
  • Posts: 270
Disk status snip for Raspios linux.
« on: December 16, 2023, 10:56:38 am »
Hello FPC people,

Does anybody have a native snip for:

1 = a function to read the max disk capacity
2 = a function to read the used space
3 = a function to read data rate processed

For example for /dev/sda1

On Raspios linux for the RPI ZERO or RPI-3

Greets, Wouter van Wegen, PascalByThree...

PS: Photo from my new NAS project included. Now working on the PRI MOD

PS2: A name of a component pack will also do fine.

Edit: the  sysutils unit got Diskfree DiskSize in it. Only Waiting for the datarate solution.
« Last Edit: December 16, 2023, 11:34:22 am by pascalbythree »

pascalbythree

  • Sr. Member
  • ****
  • Posts: 270
Re: Disk status snip for Raspios linux.
« Reply #1 on: December 16, 2023, 12:47:54 pm »
Yay! it got to work already!

Code: Pascal  [Select][+][-]
  1. program WVW_NAS_CONSOLE_TEST_V4;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. uses
  6.   {$IFDEF UNIX}
  7.   cthreads,
  8.   {$ENDIF}
  9.   Classes,
  10.   uThreadTimer,
  11.   SysUtils, CustApp,
  12.   crt, sockets, baseunix;
  13.  
  14. const
  15.   IPPROTO_IP     = 0;
  16.   IF_NAMESIZE    = 16;
  17.   SIOCGIFCONF    = $8912;
  18.  
  19. type
  20.  {$packrecords c}
  21.   tifr_ifrn = record
  22.     case integer of
  23.       0 : (ifrn_name: array [0..IF_NAMESIZE-1] of char);
  24.   end;
  25.   PIFrec = ^TIFrec;
  26.   TIFrec = record
  27.     ifr_ifrn : tifr_ifrn;
  28.     case integer of
  29.       0 : (ifru_addr      : TSockAddr);
  30.   end;
  31.   TIFConf = record
  32.     ifc_len : longint;
  33.     case integer of
  34.       0 : (ifcu_buf : pointer);
  35.       1 : (ifcu_req : ^tifrec);
  36.   end;
  37.  
  38. var olddiskused: Int64;  
  39.  
  40. function GetLocalIPs:string;
  41. var
  42.   i,n,Sd : Integer;
  43.   buf : Array[0..1023] of byte;
  44.   ifc : TIfConf;
  45.   ifp : PIFRec;
  46.   names:string;
  47. begin
  48.     sd:=fpSocket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
  49.     result:='';
  50.     if (sd<0) then
  51.       exit;
  52.     Try
  53.       ifc.ifc_len:=Sizeof(Buf);
  54.       ifc.ifcu_buf:=@buf;
  55.       if fpioctl(sd, SIOCGIFCONF, @ifc)<0 then
  56.         Exit;
  57.       n:= ifc.ifc_len;
  58.       i:=0;
  59.       names:='';
  60.       While (i<n) do
  61.         begin
  62.         ifp:=PIFRec(PByte(ifc.ifcu_buf)+i);
  63.         names:=names+ ifp^.ifr_ifrn.ifrn_name+ ' ';
  64.         //if i>0 then result:=result+',';
  65.         result:=NetAddrToStr(ifp^.ifru_addr.sin_addr);
  66.         i:=i+sizeof(TIFrec);
  67.         end;
  68.     Finally
  69.       fileClose(sd);
  70.     end;
  71. end;
  72.  
  73. procedure DoOnTimer(Sender: TObject);
  74. var varDISKused:Int64;
  75.     varDISKFree:Int64;
  76.         varDISKSize:Int64;
  77.         varMBadded :Int64;
  78. begin
  79.   ClrScr;
  80.  
  81.   Writeln('********************************'+#10+#13);
  82.   writeln('IP: '+GetLocalIPs+#10+#13);
  83.   Writeln ('Now : ',FormatDateTime('hh:nn:ss',now)+#10+#13);
  84.  
  85.   varDISKfree := DISKfree(0);
  86.   varDISKfree := round(varDISKfree / 1024); // KB
  87.   varDISKfree := round(varDISKfree / 1024); // MB  
  88.   writeln('Diskfree: '+IntToStr(varDiskfree)+' MB'+#10+#13);
  89.  
  90.   varDISKSize := DISKSize(0);
  91.   varDISKSize := round(varDISKSize / 1024); // KB
  92.   varDISKSize := round(varDISKSize / 1024); // MB  
  93.   writeln('Disksize: '+IntToStr(varDISKSize)+' MB'+#10+#13);
  94.  
  95.   olddiskused := varDISKused;
  96.  
  97.   varDISKused := Disksize(0) - Diskfree(0);
  98.   varDISKused := round(varDISKused / 1024); // KB
  99.   varDISKused := round(varDISKused / 1024); // MB
  100.   writeln('Diskused: '+IntToStr(varDISKused)+' MB'+#10+#13);
  101.  
  102.   varMBadded := varDISKused - olddiskused;
  103.   writeln('Added: '+IntToStr(varMBadded)+' MB/s'+#10+#13);
  104.  
  105.   Writeln('********************************'+#10+#13);
  106. end;
  107.  
  108.  
  109. var
  110.   ThreadTimer: TThreadTimer;
  111.   M: TMethod;
  112. begin
  113.  
  114.   olddiskused := varDISKused;
  115.   ThreadTimer := TThreadTimer.Create(True);
  116.   ThreadTimer.Interval := 1000;
  117.   M.Data := nil;
  118.   M.Code := @DoOnTimer;
  119.   ThreadTimer.OnTimer := TNotifyEvent(M);
  120.   ThreadTimer.StartTimer;
  121.  
  122.   Writeln('Press a key to terminate');
  123.   Readln;
  124.  
  125.   ThreadTimer.StopTimer;
  126.   ThreadTimer.Terminate;
  127.   ThreadTimer.WaitFor;
  128. end.

Now i am going to fuck I2C on it later on. In a few weeks!

 

TinyPortal © 2005-2018