Send løbende antal login dagligt til adminsitet
Source: Download script
Last Updated: 4. December 2024 by Agnete Moos (agms@sonderborg.dk)
Parameters:
| Navn | Type | Standardværdi | Påkrævet |
|---|---|---|---|
Click to see the source code
#!/bin/sh
set -x
LOGIN_COUNT_SCRIPT="/usr/local/lib/os2borgerpc/count_daily_logins.sh"
LOGIN_COUNT_SERVICE="/etc/systemd/system/os2borgerpc-count_daily_logins.service"
DATE_FILE="/etc/os2borgerpc/last_on_date.txt"
CONFIG_NAME="login_counts"
DATA_LIMIT=89 # This is one less than the number of days that are stored
ROOTCRON_TMP="/tmp/rootcron"
ACTIVATE=$1
mkdir --parents "$(dirname $LOGIN_COUNT_SCRIPT)" "$(dirname $DATE_FILE)"
crontab -l > $ROOTCRON_TMP
sed -i "/count_daily_logins/d" $ROOTCRON_TMP
if [ "$ACTIVATE" = "False" ]; then
systemctl disable "$(basename $LOGIN_COUNT_SERVICE)"
crontab $ROOTCRON_TMP
rm --force $LOGIN_COUNT_SCRIPT $LOGIN_COUNT_SERVICE \
$DATE_FILE $ROOTCRON_TMP
exit 0
fi
echo "0 * * * * $LOGIN_COUNT_SCRIPT" >> $ROOTCRON_TMP
crontab $ROOTCRON_TMP
rm --force $ROOTCRON_TMP
# When the script is run, get value for the day before
# This might not be necessary, but it's convenient for testing
date -d "yesterday" +%F > $DATE_FILE
cat < $LOGIN_COUNT_SCRIPT
#!/usr/bin/env bash
LAST_ON_DATE_FULL=\$(cat $DATE_FILE)
# Convert to the date format used in auth.log
LAST_ON_DATE=\$(LANG=en_US.UTF-8 date -d "\$LAST_ON_DATE_FULL" "+%b %_d")
TODAY_DATE_FULL=\$(date -d "today" +%F)
# Stop if the date to be checked is today
if [ "\$LAST_ON_DATE_FULL" = "\$TODAY_DATE_FULL" ]; then
exit 0
fi
LOG_FILE="/var/log/auth.log"
OLD_LOGIN_COUNTS=\$(/usr/local/bin/get_os2borgerpc_config "$CONFIG_NAME")
if ! grep --quiet "\$LAST_ON_DATE" \$LOG_FILE; then
LOG_FILE="/var/log/auth.log.1"
fi
LOGIN_COUNT=\$(grep --text "\$LAST_ON_DATE" "\$LOG_FILE" | grep -c "New session c[^ ]* of user user")
if [ -z "\$OLD_LOGIN_COUNTS" ]; then
CONFIG_VALUE=\$(echo "\$LAST_ON_DATE_FULL: \$LOGIN_COUNT")
else
# Remove old values to ensure that we never save more than DATA_LIMIT+1 days
IFS="," read -ra OLD_COUNTS_ARRAY <<< "\$(echo "\$OLD_LOGIN_COUNTS" | sed "s/, /,/g")"
if [ \${#OLD_COUNTS_ARRAY[@]} -gt $DATA_LIMIT ]; then
OLD_LOGIN_COUNTS=\$(IFS="," ; echo "\${OLD_COUNTS_ARRAY[*]: -$DATA_LIMIT}" | sed "s/,/, /g")
fi
CONFIG_VALUE=\$(echo "\$OLD_LOGIN_COUNTS, \$LAST_ON_DATE_FULL: \$LOGIN_COUNT")
fi
if grep --quiet "\$LAST_ON_DATE_FULL" <<< "\$OLD_LOGIN_COUNTS"; then
echo \$TODAY_DATE_FULL > $DATE_FILE
exit 0
fi
OLD_CONFIG_VALUE=\$(/usr/local/bin/get_os2borgerpc_config "$CONFIG_NAME")
/usr/local/bin/set_os2borgerpc_config "$CONFIG_NAME" "\$CONFIG_VALUE"
PUSH_OUTPUT=\$(/usr/local/bin/os2borgerpc_push_config_keys "$CONFIG_NAME")
if grep --quiet "The following keys were pushed to the admin system:" <<< "\$PUSH_OUTPUT"; then
echo \$TODAY_DATE_FULL > $DATE_FILE
else
/usr/local/bin/set_os2borgerpc_config "$CONFIG_NAME" "\$OLD_CONFIG_VALUE"
fi
EOF
chmod 700 $LOGIN_COUNT_SCRIPT
cat < $LOGIN_COUNT_SERVICE
[Unit]
Description=OS2borgerPC count daily logins service
[Service]
Type=simple
ExecStart=$LOGIN_COUNT_SCRIPT
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now "$(basename $LOGIN_COUNT_SERVICE)" Beskrivelse
Dette script gør at computeren sender sit daglige antal logins til adminsitet. Dette kan give et indblik i hvor meget en given maskine anvendes.
Eksempel: Scriptet køres ud på en række maskiner. Man kigger på dataen d. 21/10 og vil kunne se der d. 20/10 var 10 logins på PC1, 12 logins på PC2, 8 logins på PC3 etc. Du kan derved se, hvor mange gange der er blevet logget ind på en given maskine på en given dag.
BEMÆRK: Denne data er ikke rigtig brugbar, før man slår automatisk login på den givne maskine FRA, som kan gøres med scriptet “Automatisk borgerlogin til/fra”. Inden da tælles såvel automatiske og manuelle logins med.
Dataen bliver sendt, så den kan ses under tabben “Konfigurationer” for en Computer, og den udstilles derfra igennem det nye API, så dataen kan importeres i programmer som Power BI, eller tilsvarende open source software.
Yderligere informationer:
- Maskinen vil kun indrapportere antal logins for de dage, hvor den har været tændt.
- Maskinen indrapporterer først antal logins for en given dag på den efterfølgende dag.
- Maskinen opbevarer dataen i 90 dage.
Parametre
- Aktiver? Sæt hak i tjekboksen for at aktivere indrapportering af daglige antal login. Lad tjekboksen stå tom for at deaktivere indrapporteringen.