]> granicus.if.org Git - sysstat/commitdiff
sa1: Insert a comment in daily datafile on system suspend/resume
authorSebastien GODARD <sysstat@users.noreply.github.com>
Mon, 11 May 2020 13:43:15 +0000 (15:43 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Mon, 11 May 2020 13:43:15 +0000 (15:43 +0200)
Add a new option ("--sleep") to sa1 so that a comment can be inserted in
current daily datafile on system suspend/resume.
This comment can then be displayed using sar's option -C.
E.g.:

$ sar -C
Linux 5.6.10-300.fc32.x86_64 (localhost.localdomain)  05/11/2020  _x86_64_ (8 CPU)
02:53:05 PM  LINUX RESTART (8 CPU)

02:55:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:00:01 PM     all      1.66      0.00      1.27      0.17      0.00     96.89
03:10:01 PM     all      1.30      0.00      1.38      0.20      0.00     97.12
03:12:22 PM  COM LINUX SLEEP MODE (pre suspend)
03:14:55 PM  COM LINUX SLEEP MODE (post suspend)
03:15:31 PM     all      2.79      0.00      3.46      4.35      0.00     89.40
03:20:01 PM     all      0.66      0.00      0.82      0.13      0.00     98.39
Average:        all      3.50      0.00      3.53      0.78      0.00     92.19

"sa1 --sleep" will be called by sysstat.sleep script installed in
$systemdsleepdir directory if systemd is available.

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
.gitignore
Makefile.in
configure
configure.in
cron/sysstat.sleep.in [new file with mode: 0644]
sa1.in

index 7db11e8ba3aa86133601136926531e70671361cf..f14a82137f41dbd88339f745fdbaedf3ba62ddfd 100644 (file)
@@ -19,6 +19,7 @@ cron/sysstat-collect.service
 cron/sysstat-collect.timer
 cron/sysstat-summary.service
 cron/sysstat-summary.timer
+cron/sysstat.sleep
 man/sa1.8
 man/sa2.8
 man/sadc.8
index 8a8778f6d450062668776ddc2858247967cac6fe..c00c84462649cfcffe3598e45a978644be9cacfb 100644 (file)
@@ -152,6 +152,7 @@ endif
 # Systemd
 SYSTEMCTL = @SYSTEMCTL@
 SYSTEMD_UNIT_DIR = @SYSTEMD_UNIT_DIR@
+SYSTEMD_SLEEP_DIR = @SYSTEMD_SLEEP_DIR@
 
 ifndef USE_CROND
 USE_CROND = @USE_CROND@
@@ -449,8 +450,14 @@ ifeq ($(INSTALL_DOC),y)
        $(INSTALL_DATA) *.lsm $(DESTDIR)$(DOC_DIR)
 endif
 
+ifdef SYSTEMD_UNIT_DIR
+install_all: install_base cron/sysstat-collect.service cron/sysstat-collect.timer \
+       cron/sysstat.sleep cron/sysstat-summary.service cron/sysstat-summary.timer
+else
 install_all: install_base cron/crontab sysstat \
        cron/sysstat.crond cron/sysstat.cron.daily cron/sysstat.cron.hourly
+endif
+
 ifneq ($(IGNORE_FILE_ATTRIBUTES),y)
        $(CHOWN) $(CRON_OWNER) $(DESTDIR)$(SA_DIR)
 endif
@@ -468,6 +475,11 @@ else
                mkdir -p $(DESTDIR)$(RC_DIR); \
        fi
 endif
+
+ifdef SYSTEMD_SLEEP_DIR
+       mkdir -p $(DESTDIR)$(SYSTEMD_SLEEP_DIR)
+endif
+
        if [ -z "$(SYSTEMD_UNIT_DIR)" -o ! -d "$(DESTDIR)$(SYSTEMD_UNIT_DIR)" ]; then \
                if [ -d $(DESTDIR)/etc/cron.d ]; then \
                        $(INSTALL_DATA) cron/sysstat.crond $(DESTDIR)/etc/cron.d/sysstat; \
@@ -521,6 +533,10 @@ endif
                        fi \
                fi \
        fi
+       if [ -n "$(SYSTEMD_UNIT_DIR)" -a -n "$(SYSTEMD_SLEEP_DIR)" -a -d "$(DESTDIR)$(SYSTEMD_SLEEP_DIR)" ]; then \
+               $(INSTALL_BIN) cron/sysstat.sleep $(DESTDIR)$(SYSTEMD_SLEEP_DIR); \
+       fi
+
 ifeq ($(COPY_ONLY),n)
        if [ -n "$(SYSTEMD_UNIT_DIR)" -a -x "$(SYSTEMCTL)" ]; then \
                $(SYSTEMCTL) enable sysstat.service; \
@@ -619,6 +635,9 @@ endif
                rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysstat-summary.service; \
                rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysstat-summary.timer; \
        fi
+       if [ -n "$(SYSTEMD_UNIT_DIR)" -a -n "$(SYSTEMD_SLEEP_DIR)" -a -d "$(DESTDIR)$(SYSTEMD_SLEEP_DIR)" ]; then \
+               rm -f $(DESTDIR)$(SYSTEMD_SLEEP_DIR)/sysstat.sleep; \
+       fi
 
 ifeq ($(INSTALL_CRON),y)
 uninstall: uninstall_all
@@ -668,7 +687,8 @@ clean:
 almost-distclean: clean nls/sysstat.pot
        rm -f sa1 sa2 sysstat cron/crontab version.h sysconfig.h
        rm -f sysstat.sysconfig cron/sysstat.crond cron/sysstat.cron.daily sysstat.service
-       rm -f cron/sysstat-collect.service cron/sysstat-collect.timer cron/sysstat-summary.service cron/sysstat-summary.timer
+       rm -f cron/sysstat-collect.service cron/sysstat-collect.timer
+       rm -f cron/sysstat-summary.service cron/sysstat-summary.timer cron/sysstat.sleep
        rm -f cron/sysstat.cron.hourly cron/sysstat.crond.sample cron/sysstat.crond.sample.in
        rm -f man/sa1.8 man/sa2.8 man/sadc.8 man/sadf.1 man/sar.1 man/iostat.1 man/sysstat.5
        rm -f tests/variables tests/data
index 3c4556b5ed8d585952c31a444c4ea2e97d939a54..40be979942e9cf66833b1949f6bab671eb7215be 100755 (executable)
--- a/configure
+++ b/configure
@@ -677,6 +677,7 @@ HAVE_PCP
 DFSENSORS
 LFSENSORS
 HAVE_SENSORS
+SYSTEMD_SLEEP_DIR
 SYSTEMD_UNIT_DIR
 SYSTEMCTL
 PKG_CONFIG
@@ -747,6 +748,7 @@ ac_subst_files=''
 ac_user_opts='
 enable_option_checking
 with_systemdsystemunitdir
+with_systemdsleepdir
 enable_sensors
 enable_pcp
 enable_largefile
@@ -1413,6 +1415,8 @@ Optional Packages:
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-systemdsystemunitdir=DIR
                           Directory for systemd service files
+  --with-systemdsleepdir=DIR
+                          Directory for systemd suspend/resume scripts
 
 Some influential environment variables:
   CC          C compiler command
@@ -4112,6 +4116,18 @@ if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno
 
 fi
 
+# Check whether --with-systemdsleepdir was given.
+if test "${with_systemdsleepdir+set}" = set; then :
+  withval=$with_systemdsleepdir;
+else
+  with_systemdsleepdir=$($PKG_CONFIG --variable=systemdsleepdir systemd)
+fi
+
+if test -n "$with_systemdsleepdir" -a "x$with_systemdsleepdir" != xno ; then
+    SYSTEMD_SLEEP_DIR=$with_systemdsleepdir
+
+fi
+
 # Check libraries
 
 # Check header files
@@ -5891,6 +5907,8 @@ ac_config_files="$ac_config_files cron/sysstat-summary.service"
 
 ac_config_files="$ac_config_files cron/sysstat-summary.timer"
 
+ac_config_files="$ac_config_files cron/sysstat.sleep"
+       # Permissions must be changed
 ac_config_files="$ac_config_files man/sa1.8:man/sa1.in"
                # File must be renamed
 ac_config_files="$ac_config_files man/sa2.8:man/sa2.in"
@@ -6633,6 +6651,7 @@ do
     "cron/sysstat-collect.timer") CONFIG_FILES="$CONFIG_FILES cron/sysstat-collect.timer" ;;
     "cron/sysstat-summary.service") CONFIG_FILES="$CONFIG_FILES cron/sysstat-summary.service" ;;
     "cron/sysstat-summary.timer") CONFIG_FILES="$CONFIG_FILES cron/sysstat-summary.timer" ;;
+    "cron/sysstat.sleep") CONFIG_FILES="$CONFIG_FILES cron/sysstat.sleep" ;;
     "man/sa1.8") CONFIG_FILES="$CONFIG_FILES man/sa1.8:man/sa1.in" ;;
     "man/sa2.8") CONFIG_FILES="$CONFIG_FILES man/sa2.8:man/sa2.in" ;;
     "man/sadc.8") CONFIG_FILES="$CONFIG_FILES man/sadc.8:man/sadc.in" ;;
@@ -7062,6 +7081,7 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
     "sa2":F) chmod +x sa2 ;;
     "cron/sysstat.crond.sample.in":F) sed s/^/#/ cron/sysstat.crond.sample.in > cron/sysstat.crond.sample ;;
     "sysstat":F) chmod +x sysstat ;;
+    "cron/sysstat.sleep":F) chmod +x cron/sysstat.sleep ;;
 
   esac
 done # for ac_tag
@@ -7108,6 +7128,7 @@ echo "
    Init directory:             ${INIT_DIR}"
 if test "$UCROND" != "yes"; then
    echo "   Systemd unit dir:          ${with_systemdsystemunitdir}"
+   echo "   Systemd sleep dir:         ${with_systemdsleepdir}"
 else
    echo "   Use standard cron daemon"
 fi
index 38d387533eb5ab08090e2f2afefc35d9c4fb3e75..42273f909f5949a8d6ccd947574aac8d7f2b5508 100644 (file)
@@ -53,6 +53,12 @@ AC_ARG_WITH([systemdsystemunitdir],
 if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then
     AC_SUBST([SYSTEMD_UNIT_DIR], [$with_systemdsystemunitdir])
 fi
+AC_ARG_WITH([systemdsleepdir],
+    AS_HELP_STRING([--with-systemdsleepdir=DIR],[Directory for systemd suspend/resume scripts]),
+    [], [with_systemdsleepdir=$($PKG_CONFIG --variable=systemdsleepdir systemd)])
+if test -n "$with_systemdsleepdir" -a "x$with_systemdsleepdir" != xno ; then
+    AC_SUBST([SYSTEMD_SLEEP_DIR], [$with_systemdsleepdir])
+fi
 
 # Check libraries
 
@@ -713,6 +719,7 @@ AC_CONFIG_FILES([cron/sysstat-collect.service])
 AC_CONFIG_FILES([cron/sysstat-collect.timer])
 AC_CONFIG_FILES([cron/sysstat-summary.service])
 AC_CONFIG_FILES([cron/sysstat-summary.timer])
+AC_CONFIG_FILES([cron/sysstat.sleep], [chmod +x cron/sysstat.sleep])   # Permissions must be changed
 AC_CONFIG_FILES([man/sa1.8:man/sa1.in])                # File must be renamed
 AC_CONFIG_FILES([man/sa2.8:man/sa2.in])                # File must be renamed
 AC_CONFIG_FILES([man/sadc.8:man/sadc.in])      # File must be renamed
@@ -732,6 +739,7 @@ echo "
    Init directory:             ${INIT_DIR}"
 if test "$UCROND" != "yes"; then
    echo "   Systemd unit dir:          ${with_systemdsystemunitdir}"
+   echo "   Systemd sleep dir:         ${with_systemdsleepdir}"
 else
    echo "   Use standard cron daemon"
 fi
diff --git a/cron/sysstat.sleep.in b/cron/sysstat.sleep.in
new file mode 100644 (file)
index 0000000..3d55ad6
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+# sysstat suspend/resume hack
+# for systemd's @SYSTEMD_SLEEP_DIR@ directory
+# (C) 2020 Sebastien Godard (sysstat <at> orange.fr)
+
+# Insert a comment in current daily datafile
+@SA_LIB_DIR@/sa1 --sleep $*
diff --git a/sa1.in b/sa1.in
index c72ce453f92e567830ce7d3d7082843c7c657456..4466daefc3ffe486ef39db6bcd461d6b6ed17abc 100644 (file)
--- a/sa1.in
+++ b/sa1.in
@@ -32,7 +32,11 @@ fi
 ENDIR=@SA_LIB_DIR@
 cd ${ENDIR}
 [ "$1" = "--boot" ] && shift && BOOT=y || BOOT=n
-if [ $# = 0 ] && [ "${BOOT}" = "n" ]
+[ "$1" = "--sleep" ] && shift && SLEEP=y || SLEEP=n
+if [ "${SLEEP}" = "y" ]
+then
+       exec ${ENDIR}/sadc -F -L ${SADC_OPTIONS} -C "LINUX SLEEP MODE ($*)" ${SA_DIR}
+elif [ $# = 0 ] && [ "${BOOT}" = "n" ]
 then
 # Note: Stats are written at the end of previous file *and* at the
 # beginning of the new one (when there is a file rotation) only if