#!/bin/sh

# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This script should be called daily to clean up log files.
# It can also be called with "--no-periodic" directly from an init
# script in which case it will clean up but not rotate.

. /usr/share/cros/disk_utils.sh

CLEANUP_PAUSED_FILE="/var/lib/cleanup_logs_paused"
NUM_DAYS_TO_PRESERVE=7
MAX_SUBDIR_SIZE=100   # MB
MAX_SUBDIR_FILES=21
# Threshold for additional histogram reporting (in 1KB blocks), 1GB in total.
ADDITIONAL_REPORTING_THRESHOLD_BLOCKS=1048576
SHADOW="/home/.shadow"
ENCRYPTED_REBOOT_VAULT="/mnt/stateful_partition/reboot_vault"

# Paths for the CRX cache. Shared with installer/crx-import.conf
UNVALIDATED_CRX_CACHE="${STATEFUL}/unencrypted/import_extensions"
VALIDATED_CRX_CACHE=/var/cache/external_cache

report_additional_statistics() {
  # Number of users on device.
  local user_count
  user_count="$(find "${SHADOW}" -maxdepth 1 -mindepth  1 -type d | wc -l)"
  metrics_client -s Platform.DiskUsage.UsersOnDevice "${user_count}"
}

# Remove older files, keep deleting until the directory is less than 100MB
# or only one day old files remains.  ...and also delete older files if
# there are too many.
remove_old_files() {
  local subdir="$1"
  local file_pattern="$2"
  local mtime="${NUM_DAYS_TO_PRESERVE}"
  if [ ! -d "${subdir}" ]; then
    return
  fi
  while [ "${mtime}" -ge 1 ]; do
    find "${subdir}" -type f -name "${file_pattern}" -mtime "+${mtime}" -delete
    if [ "$(du -s --block-size=1M "${subdir}" | cut -f 1)" -gt \
         "${MAX_SUBDIR_SIZE}" ]; then
      : "$(( mtime -= 1 ))"
    else
      break
    fi
  done

  # Delete all but the most recent MAX_SUBDIR_FILES files.
  #
  # Note that 'ls -t' doesn't have a "null terminated" mode apparently
  # because you're not supposed to use it for scripts, so we end up
  # using several steps.
  find "${subdir}" -type f -name "${file_pattern}" -printf "%T+ %p\0" | \
    sort -zr | \
    cut -z -d ' ' -f 2- | \
    tail -z "-n+$(( MAX_SUBDIR_FILES + 1 ))" | \
    xargs -r -0 rm
}

rotate_file() {
  local file="$1"
  if [ ! -f "${file}" ]; then
    # Avoid creating an empty file if it does not exist to begin with
    return
  fi
  if [ ! -s "${file}" ]; then
    # Avoid creating an empty file if it's already empty.
    return
  fi
  local basename="${file%%.*}"
  local extension="${file#*.}"
  if [ "${basename}" = "${extension}" ]; then
    extension=""
  else
    extension=".${extension}"
  fi
  echo Rotating "${file}"
  for i in $(seq "${NUM_DAYS_TO_PRESERVE}" -1 2); do
    mv -f "${basename}.$((i - 1))${extension}" "${basename}.$i${extension}"
  done
  mv -f "${basename}${extension}" "${basename}.1${extension}"
  touch "${basename}${extension}"
  chmod --reference="${basename}.1${extension}" "${basename}${extension}"
  chown --reference="${basename}.1${extension}" "${basename}${extension}"
}

rotate_logs() {
  echo Rotating rsyslogd logs
  for x in messages secure net.log faillog session_manager atrus.log \
           tlsdate.log authpolicy.log tpm-firmware-updater.log arc.log \
           recover_duts/recover_duts.log hammerd.log upstart.log typecd.log \
           bluetooth.log; do
    rotate_file "/var/log/${x}"
  done
  pkill -HUP rsyslogd
}

# Wipe the unencyrpted CRX cache if it still exists.
wipe_crx_cache() {
  local root_dev
  local removable
  local disk_percent

  # If we are on removable media or we haven't imported the crx cache,
  # don't wipe.
  root_dev="$(basename "$(rootdev -s -d)")"
  removable="$(cat "/sys/block/${root_dev}/removable")" || :
  disk_percent="$(get_stateful_usage_percent)" || :
  [ -z "${disk_percent}" ] && disk_percent=0
  if [ "${removable:-0}" -eq 0 ] && [ -d "${UNVALIDATED_CRX_CACHE}" ] && \
      [ -f "${VALIDATED_CRX_CACHE}/.initialized" ] && \
      [ "${disk_percent}" -gt 25 ]; then
    echo "Wiping unvalidated crx cache as it has already been imported."
    rm -rf "${UNVALIDATED_CRX_CACHE}"
  fi
}

remove_old_files_encrypted_reboot_vault() {
  find "${ENCRYPTED_REBOOT_VAULT}" -type f -mtime "+${NUM_DAYS_TO_PRESERVE}" \
      -delete
}

remove_old_pattern_log_files() {
  # Remove old biometrics cypto init, daemon, and firmware
  # updater logs
  remove_old_files /var/log/bio_crypto_init "*"
  remove_old_files /var/log/biod "biod.*"
  remove_old_files /var/log/biod "bio_fw_updater.*"

  # Remove old chrome logs (not logged in)
  remove_old_files /var/log/chrome "chrome_*-*"

  # Remove old chrome logs (logged in)
  remove_old_files /home/chronos/user/log "chrome_*-*"

  # Remove old miscellaneous UI logs
  remove_old_files /var/log/ui "ui.*-*"

  # Remove old update engine logs
  remove_old_files /var/log/update_engine "update_engine.*-*"

  # Remove old power manager logs
  remove_old_files /var/log/power_manager "power*"

  # Remove old vmlog logs (written by metrics_daemon)
  remove_old_files /var/log/vmlog "vmlog.*"

  # Remove old modemfwd helper logs
  remove_old_files /var/log/modemfwd "helper_log.*"
}

usage() {
  echo "usage: $0 [--no-periodic]"
  echo
  echo "Delete old logs and perform periodic tasks like rotating logs."
  echo
  echo "This program always deletes old log files for programs that"
  echo "create one log per boot.  Unless called with --no-periodic"
  echo "it will also do periodic tasks like rotating log files"
  echo "and sending metrics."
}

main() {
  if [ "$#" -eq 1 ] && [ "$1" != "--no-periodic" ] ||
     [ "$#" -gt 1 ]; then
    usage
    return 1
  fi

  if [ -r "${CLEANUP_PAUSED_FILE}" ]; then
    echo "Exiting early because ${CLEANUP_PAUSED_FILE} exists."
    return 0
  fi

  remove_old_pattern_log_files

  # Remove iwlwifi logs older than one hour, since they are large.
  find /var/log -name "last_iwlwifi_dump*" -mmin +60 -delete

  # Remove old files in the encrypted reboot vault.
  remove_old_files_encrypted_reboot_vault

  # Quit if called at init; everything below only happens periodically
  if [ "$1" = "--no-periodic" ]; then
    return 0
  fi

  # Rotate other logs
  rotate_logs

  # Report disk usage statistics
  METRICS_ARGS="0 1073741824 50"
  metrics_client Platform.DiskUsageVar \
                "$(du -sxk /var/ | awk '{print $1}')" ${METRICS_ARGS}
  metrics_client Platform.DiskUsageChronos \
                "$(du -sxk /home/chronos | awk '{print $1}')" ${METRICS_ARGS}

  # Report overall stateful usage.
  metrics_client -e Platform.StatefulUsage "$(get_stateful_usage_percent)" 101

  # Report lifetime writes from the stateful partition in GiBs.
  LIFETIME_WRITES="$(get_stateful_lifetime_writes)"
  metrics_client Platform.StatefulLifetimeWrites \
    "$((LIFETIME_WRITES / 1048576))" 0 16777216 100

  # Report used space from the stateful partition in GBs.
  STATEFUL_USED="$(get_stateful_used_space_blocks 1000)"
  metrics_client Platform.StatefulUsedSpace \
    "$((STATEFUL_USED / 1000000))" 0 16777216 50

  # Report free space from the stateful partition in MBs. Some boards
  # ship with a variety of SSD sizes, so free space metrics can be
  # useful in addition to used space. Record in MB so we have higher
  # precision in the buckets close to zero (out of space). Max out at
  # 2 TB.
  STATEFUL_FREE="$(get_stateful_free_space_blocks 1000)"
  metrics_client Platform.StatefulFreeSpace \
    "$((STATEFUL_FREE / 1000))" 0 2097152 50

  NUMBER_OF_USERS="$(ls /home/user/ | wc -l)"
  metrics_client Platform.DiskUsage.NumUserHomeDirectories \
                "${NUMBER_OF_USERS}" 1 50 50

  local last_activity
  if ! last_activity="$(cryptohome --action=dump_last_activity)" ; then
    logger -t "chromeos-cleanup-logs" -p warning \
        "cryptohome dump_last_activity failed!"

    metrics_client -s Login.UsersActiveWeekly.Percent 0
  else
    USERS_ACTIVE_DAILY="$(echo "${last_activity}" |
        awk 'BEGIN {count = 0} $2 <= 1 {++count} END {print count}')"
    metrics_client -s Login.UsersActiveDaily "${USERS_ACTIVE_DAILY}"

    USERS_ACTIVE_WEEKLY="$(echo "${last_activity}" |
        awk 'BEGIN {count = 0} $2 <= 7 {++count} END {print count}')"
    metrics_client -s Login.UsersActiveWeekly "${USERS_ACTIVE_WEEKLY}"

    USERS_ACTIVE_28DAYS="$(echo "${last_activity}" |
        awk 'BEGIN {count = 0} $2 <= 28 {++count} END {print count}')"
    metrics_client -s Login.UsersActive28Days "${USERS_ACTIVE_28DAYS}"

    if [ "${NUMBER_OF_USERS}" -gt 0 ] ; then
      metrics_client -s Login.UsersActiveWeekly.Percent \
                    "$((WEEKLY_USERS_ACTIVE * 100 / NUMBER_OF_USERS))"
    else
      # Note that this metric is also reported if dump_last_activity failed.
      # See above.
      metrics_client -s Login.UsersActiveWeekly.Percent 0
    fi

    # Report days since the least frequently used account signed in.
    # It is reported every time to measure effect of autodeletion feature.
    DAYS_SINCE_LFU_ACCOUNT_SIGNIN="$(echo "${last_activity}" |
        awk 'BEGIN {max = 0} $2 > max {max = $2} END {print max}')"

    # Check if there are any users.
    if [ "${DAYS_SINCE_LFU_ACCOUNT_SIGNIN}" != "" ]; then
      metrics_client Login.LeastUsedAccountDays \
                    "${DAYS_SINCE_LFU_ACCOUNT_SIGNIN}" 1 90 90
    fi
  fi

  # Report additional metrics if we are low on free space.
  if [ "$(get_stateful_free_space_blocks)" -le \
      "${ADDITIONAL_REPORTING_THRESHOLD_BLOCKS}" ] ; then
    report_additional_statistics
  fi

  wipe_crx_cache
}
main "$@"
