Part-2 - exercise: Clean old unused maps over time
This exercise requires having followed the part 2.
This exercise is meant for developers to train on solving a problem with snaps. One can apply the freshly learned knowledge to a practical problem.
Assignment
With the mapping
daemon we might create a lot of maps. Over time, this could become an issue. All the maps image might take too much space on our disk and if they are old they are most probably not necessary any more. Our snap could embed another application that would check once in a while if there is any old map that we don’t need any more.
The assignment is to add a new background process that runs every day. This process must identify maps that are no longer used and older than one month. Finally, we must delete those old maps.
We might want to have a look at the timer
feature of daemons, presented in the documentation.
Outcome
Our snap must have one more daemon called map-cleaner
. We shouldn’t have to call this application manually. The map-cleaner
daemon should clean up our old and unused maps once a day.
Solution
The solution
First we must create a script that cleans up the maps. Our maps are located in `$SNAP_USER_COMMON`. Every map consists of two files, the `PGM` and the `YAML`. Since our map symlink points to the `YAML` we will use these files to identify the maps to delete.Our snap/local/map_cleaner.sh
script will look like:
#!/usr/bin/bash
# path to the last map
CURRENT_MAP=$(readlink -f $SNAP_USER_COMMON/map/current_map.yaml)
# get the list of YAML files older than a month except for the current map
LIST_OF_FILES=$(find $SNAP_USER_COMMON/map -maxdepth 1 -type f -mtime +30 -name "*.yaml" ! -path $CURRENT_MAP)
# delete the YAML files
rm -f $LIST_OF_FILES
# delete the associated PGM
echo $LIST_OF_FILES | sed 's/yaml/pgm/' | xargs rm -f
After making the map_cleaner.sh
script executable, we can add the following to our snapcraft.yaml
:
map-cleaner:
command: usr/bin/map_cleaner.sh
daemon: simple
timer: "04:00" # runs every day at 4 am
In order to “speed up” the tests, we can of course replace the timer: 04:00
with timer: 00:00-24:00/288
to run it every 5 minutes and remove the -mtime +30
option in the find command.