@@ -22,11 +22,14 @@ use crate::contract_stub::ContractError;
22
22
23
23
const DLADM : & str = "/usr/sbin/dladm" ;
24
24
const IPADM : & str = "/usr/sbin/ipadm" ;
25
+ const KSTAT : & str = "/usr/bin/kstat" ;
25
26
const NVMEADM : & str = "/usr/sbin/nvmeadm" ;
26
27
const PFEXEC : & str = "/usr/bin/pfexec" ;
27
28
const PFILES : & str = "/usr/bin/pfiles" ;
28
29
const PSTACK : & str = "/usr/bin/pstack" ;
29
30
const PARGS : & str = "/usr/bin/pargs" ;
31
+ const SVCS : & str = "/usr/bin/svcs" ;
32
+ const UPTIME : & str = "/usr/bin/uptime" ;
30
33
const ZFS : & str = "/usr/sbin/zfs" ;
31
34
const ZONEADM : & str = "/usr/sbin/zoneadm" ;
32
35
const ZPOOL : & str = "/usr/sbin/zpool" ;
@@ -263,6 +266,99 @@ pub fn pfiles_process(pid: i32) -> Command {
263
266
cmd
264
267
}
265
268
269
+ pub fn uptime ( ) -> Command {
270
+ let mut cmd = std:: process:: Command :: new ( UPTIME ) ;
271
+ cmd. env_clear ( ) ;
272
+ cmd
273
+ }
274
+
275
+ pub fn kstat_low_page ( ) -> Command {
276
+ let mut cmd = std:: process:: Command :: new ( PFEXEC ) ;
277
+ cmd. env_clear ( ) . arg ( KSTAT ) . arg ( "-p" ) . arg ( "unix::system_pages:low_mem_scan" ) ;
278
+ cmd
279
+ }
280
+
281
+ pub fn svcs_show_disabled ( ) -> Command {
282
+ let mut cmd = std:: process:: Command :: new ( PFEXEC ) ;
283
+ cmd. env_clear ( ) . arg ( SVCS ) . arg ( "-xZ" ) ;
284
+ cmd
285
+ }
286
+
287
+ pub fn count_disks ( ) -> Command {
288
+ let mut cmd = std:: process:: Command :: new ( "bash" ) ;
289
+ cmd. env_clear ( ) . args ( [
290
+ "-c" ,
291
+ "(pfexec diskinfo -pH | tee | wc -l | xargs | grep -x '12' > /dev/null)
292
+ && echo 'OK: All expected disks found'
293
+ || echo 'WARN: Unexpected number of physical disks (expected 12)'" ,
294
+ ] ) ;
295
+ cmd
296
+ }
297
+
298
+ pub fn zfs_list_unmounted ( ) -> Command {
299
+ let mut cmd = std:: process:: Command :: new ( "bash" ) ;
300
+ cmd. env_clear ( ) . args ( [
301
+ "-c" ,
302
+ "pfexec zfs list -r -o name,mounted | grep oxp | grep -v yes$
303
+ && echo 'WARN: Found unmounted dataset(s)'
304
+ || echo 'OK: No unmounted datasets'" ,
305
+ ] ) ;
306
+ cmd
307
+ }
308
+
309
+ pub fn count_crucibles ( ) -> Command {
310
+ let mut cmd = std:: process:: Command :: new ( "bash" ) ;
311
+ cmd. env_clear ( )
312
+ . args ( [
313
+ "-c" ,
314
+ "(zoneadm list | grep crucible | grep -v pantry | tee | wc -l | xargs | grep -x '10' > /dev/null)
315
+ && echo 'OK: 10 Crucibles found'
316
+ || echo 'WARN: Unexpected number of crucible zones (expected 10)'"
317
+ ] ) ;
318
+ cmd
319
+ }
320
+
321
+ pub fn identify_datasets_close_to_quota ( ) -> Command {
322
+ let mut cmd = std:: process:: Command :: new ( "bash" ) ;
323
+ cmd. env_clear ( )
324
+ . args ( [
325
+ "-c" ,
326
+ "zfs list -Hp -o used,quota,name,avail,mountpoint |
327
+ egrep 'oxp|oxi' |
328
+ egrep -v 'none|crucible' |
329
+ awk '$2 > 0 && $1 / $2 >= 0.8 { any=1; print } END { exit !any }'
330
+ && echo 'WARN: Found near-quota datasets'
331
+ || echo 'OK: No near-quota datasets found'"
332
+ ] ) ;
333
+ cmd
334
+ }
335
+
336
+ pub fn identify_datasets_with_less_than_300_gib_avail ( ) -> Command {
337
+ let mut cmd = std:: process:: Command :: new ( "bash" ) ;
338
+ cmd. env_clear ( ) . args ( [
339
+ "-c" ,
340
+ "zfs list -Hp -o used,quota,name,avail,mountpoint |
341
+ egrep 'oxp|oxi' |
342
+ egrep -v 'none|crucible' |
343
+ awk '$4 < (300 * (1024^3)) { any=1; print } END { exit !any }'
344
+ && echo 'WARN: Found low-space datasets'
345
+ || echo 'OK: No low-space datasets found'" ,
346
+ ] ) ;
347
+ cmd
348
+ }
349
+
350
+ pub fn dimm_check ( ) -> Command {
351
+ let mut cmd = std:: process:: Command :: new ( "bash" ) ;
352
+ cmd. env_clear ( ) . args ( [
353
+ "-c" ,
354
+ "prtconf -m |
355
+ grep -v -e 1036271 -e 2084847
356
+ && echo 'WARN: Unexpected quantity of system memory'
357
+ || echo 'OK: Found expected quantity of system memory'" ,
358
+ ] ) ;
359
+ cmd
360
+ }
361
+
266
362
pub fn zfs_list ( ) -> Command {
267
363
let mut cmd = std:: process:: Command :: new ( PFEXEC ) ;
268
364
cmd. env_clear ( )
0 commit comments