@@ -282,6 +282,7 @@ internal_update(State = #state{limit = Limit,
282
282
os = OS ,
283
283
port = Port }) ->
284
284
CurrentFree = get_disk_free (Dir , OS , Port ),
285
+ % % note: 'NaN' is considered to be less than a number
285
286
NewAlarmed = CurrentFree < Limit ,
286
287
case {Alarmed , NewAlarmed } of
287
288
{false , true } ->
@@ -321,19 +322,28 @@ get_disk_free(Dir, {win32, _}, not_used) ->
321
322
end ,
322
323
% Note: we can use os_mon_sysinfo:get_disk_info/1 after the following is fixed:
323
324
% https://github.com/erlang/otp/issues/6156
324
- [DriveInfoStr ] = lists :filter (F , os_mon_sysinfo :get_disk_info ()),
325
-
326
- % Note: DriveInfoStr is in this format
327
- % "C:\\ DRIVE_FIXED 720441434112 1013310287872 720441434112\n"
328
- [DriveLetter , $: , $\\ , $\s | DriveInfo ] = DriveInfoStr ,
329
-
330
- % https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdiskfreespaceexa
331
- % lib/os_mon/c_src/win32sysinfo.c:
332
- % if (fpGetDiskFreeSpaceEx(drive,&availbytes,&totbytes,&totbytesfree)){
333
- % sprintf(answer,"%s DRIVE_FIXED %I64u %I64u %I64u\n",drive,availbytes,totbytes,totbytesfree);
334
- [" DRIVE_FIXED" , FreeBytesAvailableToCallerStr ,
335
- _TotalNumberOfBytesStr , _TotalNumberOfFreeBytesStr ] = string :tokens (DriveInfo , " " ),
336
- list_to_integer (FreeBytesAvailableToCallerStr )
325
+ try
326
+ % Note: DriveInfoStr is in this format
327
+ % "C:\\ DRIVE_FIXED 720441434112 1013310287872 720441434112\n"
328
+ Lines = os_mon_sysinfo :get_disk_info (),
329
+ [DriveInfoStr ] = lists :filter (F , Lines ),
330
+ [DriveLetter , $: , $\\ , $\s | DriveInfo ] = DriveInfoStr ,
331
+
332
+ % https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdiskfreespaceexa
333
+ % lib/os_mon/c_src/win32sysinfo.c:
334
+ % if (fpGetDiskFreeSpaceEx(drive,&availbytes,&totbytes,&totbytesfree)){
335
+ % sprintf(answer,"%s DRIVE_FIXED %I64u %I64u %I64u\n",drive,availbytes,totbytes,totbytesfree);
336
+ [" DRIVE_FIXED" , FreeBytesAvailableToCallerStr ,
337
+ _TotalNumberOfBytesStr , _TotalNumberOfFreeBytesStr ] = string :tokens (DriveInfo , " " ),
338
+ list_to_integer (FreeBytesAvailableToCallerStr )
339
+ catch _ :{timeout , _ }:_ ->
340
+ % % could not compute the result
341
+ 'NaN' ;
342
+ _ :Reason :_ ->
343
+ rabbit_log :warning (" Free disk space monitoring failed to retrieve the amount of available space: ~p " , [Reason ]),
344
+ % % could not compute the result
345
+ 'NaN'
346
+ end
337
347
end .
338
348
339
349
parse_free_unix (Str ) ->
0 commit comments