Skip to content

Commit 272f33b

Browse files
committed
add uptime()
1 parent 102ff19 commit 272f33b

File tree

5 files changed

+99
-4
lines changed

5 files changed

+99
-4
lines changed

+stdlib/+dotnet/uptime.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
%% DOTNET.UPTIME get system uptime
2+
3+
function t = uptime()
4+
5+
try
6+
tms = System.Environment.TickCount64;
7+
ts = System.TimeSpan.FromMilliseconds(tms);
8+
t = ts.TotalSeconds;
9+
catch e
10+
dotnetException(e)
11+
t = [];
12+
end
13+
14+
end

+stdlib/+python/uptime.m

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
function t = uptime()
2+
3+
try
4+
t0 = py.psutil.boot_time();
5+
t = py.time.time() - t0;
6+
catch
7+
t = [];
8+
end
9+
10+
end

+stdlib/+sys/uptime.m

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
%% SYS.UPTIME
2+
3+
function t = uptime()
4+
5+
t = [];
6+
7+
if ispc()
8+
[s, m] = system('pwsh -c "(Get-Uptime).TotalSeconds"');
9+
elseif ismac()
10+
[s, m] = system('sysctl -n kern.boottime | awk ''{print $4}'' | sed ''s/,//g''');
11+
else
12+
[s, m] = system('cat /proc/uptime | awk ''{print $1}''');
13+
end
14+
15+
if s == 0
16+
t = str2double(m);
17+
end
18+
19+
if ismac()
20+
t = posixtime(datetime('now', 'TimeZone', 'UTC')) - t;
21+
end
22+
23+
end

+stdlib/uptime.m

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
%% UPTIME get system uptime in seconds
2+
%
3+
%%% Outputs
4+
% * t: system uptime
5+
% * b: backend used
6+
7+
function [r, b] = uptime(backend)
8+
if nargin < 1
9+
backend = {'dotnet', 'python', 'sys'};
10+
else
11+
backend = cellstr(backend);
12+
end
13+
14+
r = '';
15+
16+
for i = 1:numel(backend)
17+
b = backend{i};
18+
switch b
19+
case 'dotnet'
20+
r = stdlib.dotnet.uptime();
21+
case 'python'
22+
if stdlib.matlabOlderThan('R2022a'), continue, end
23+
r = stdlib.python.uptime();
24+
case 'sys'
25+
r = stdlib.sys.uptime();
26+
otherwise
27+
error('stdlib:hostname:ValueError', 'Unknown backend: %s', b)
28+
end
29+
30+
if ~isempty(r)
31+
return
32+
end
33+
end
34+
35+
end

test/TestTime.m

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
TestTime < matlab.unittest.TestCase
44

55
properties (TestParameter)
6-
B_set_modtime = {'java', 'python', 'sys'}
6+
B_jps = {'java', 'python', 'sys'}
7+
B_dps = {'dotnet', 'python', 'sys'}
78
end
89

910

@@ -21,16 +22,16 @@ function test_get_modtime(tc)
2122
end
2223

2324

24-
function test_touch_modtime(tc, B_set_modtime)
25+
function test_touch_modtime(tc, B_jps)
2526

2627
fn = 'touch.txt';
2728

2829
tc.assertTrue(stdlib.touch(fn))
2930
t0 = stdlib.get_modtime(fn);
3031

31-
ok = stdlib.set_modtime(fn, datetime('tomorrow'), B_set_modtime);
32+
ok = stdlib.set_modtime(fn, datetime('tomorrow'), B_jps);
3233

33-
if ismember(B_set_modtime, stdlib.Backend().select('set_modtime'))
34+
if ismember(B_jps, stdlib.Backend().select('set_modtime'))
3435
tc.assertTrue(ok)
3536
t1 = stdlib.get_modtime(fn);
3637
tc.verifyGreaterThanOrEqual(t1, t0)
@@ -39,6 +40,18 @@ function test_touch_modtime(tc, B_set_modtime)
3940
end
4041
end
4142

43+
44+
function test_uptime(tc, B_dps)
45+
46+
if ismember(B_dps, stdlib.Backend().select('uptime'))
47+
t1 = stdlib.uptime(B_dps);
48+
tc.verifyGreaterThanOrEqual(t1, 0);
49+
tc.verifyClass(t1, 'double')
50+
else
51+
t1 = stdlib.uptime(B_dps);
52+
tc.verifyEmpty(t1)
53+
end
4254
end
4355

4456
end
57+
end

0 commit comments

Comments
 (0)