Files
hassio-addons/.github/workflows/helper_stats_graphs.yaml
2023-03-21 22:50:14 +01:00

226 lines
7.2 KiB
YAML

# yamllint disable rule:line-length
---
name: Generate weekly stats graphs
on:
workflow_run:
workflows: ["weekly_stats.yaml"]
types:
- completed
workflow_dispatch:
jobs:
stats_graphs:
runs-on: ubuntu-20.04
steps:
- name: Checkout Repo
uses: actions/checkout@v3
- name: Install apps
run: |
git pull --rebase origin master
sudo apt-get install gawk -y
sudo apt-get install gnuplot-nox -y
- name: Create global stats
run: |
# Prepare data
cp Stats Stats3
# Inverse file
gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3
# Only totals
head -n 2 Stats3 > tmp_file && mv tmp_file Stats3
# Transpose data
awk '
{
for (i=1; i<=NF; i++) {
a[NR,i] = $i
}
}
NF>p { p = NF }
END {
for(j=1; j<=p; j++) {
str=a[1,j]
for(i=2; i<=NR; i++){
str=str" "a[i,j];
}
print str
}
}' Stats3 > StatsTmp && mv StatsTmp Stats3
sed -i "1d" Stats3
# Plot graph
gnuplot-nox -persist <<-EOFMarker
set title 'Total addons'
set ylabel 'Number of installations'
set xdata time
set datafile missing "-"
set timefmt "%Y-%m-%d"
set format x "%y-%m-%d"
set datafile sep ' '
set key top left autotitle columnheader
set autoscale
set terminal png size 500,300
set output 'stats.png'
set term png tiny
plot 'Stats3' using 1:2 lt rgb 'red' w l title 'Total addons' smooth csplines
EOFMarker
rm Stats3
- name: Create addons stats
run: |
# Prepare data
cp Stats Stats3
# Remove Totals
sed -i "2d" Stats3
# Inverse file
gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3
# Only top 10
head -n 11 Stats3 > tmp_file && mv tmp_file Stats3
# Transpose data
awk '
{
for (i=1; i<=NF; i++) {
a[NR,i] = $i
}
}
NF>p { p = NF }
END {
for(j=1; j<=p; j++) {
str=a[1,j]
for(i=2; i<=NR; i++){
str=str" "a[i,j];
}
print str
}
}' Stats3 > StatsTmp && mv StatsTmp Stats3
# Add download count to names
build_list="$(head -n 1 Stats3)"
# shellcheck disable=SC2206
build_list=($build_list)
# shellcheck disable=SC2013
for var in "${build_list[@]:1}"; do
i=0
j=0
k=0
# shellcheck disable=SC2013
for i in $(sed -n "/${var}/p" Stats); do
k="$((k+1))"
if [ "$k" -eq 3 ]; then break; fi
if [ "$i" -eq "$i" ] && [ "$i" -gt "$j" ]; then j="$i"; fi
done
sed -i "s|${var}|${var}_(${j}x)|g" Stats3
done
echo "... done"
# Remove series with less than 4 points
sed -i "/^[0-9|-]* [0-9*|-]* [0-9*|-]* -/d" Stats3
# Plot graph
( gnuplot-nox -persist <<-EOFMarker
set title 'Top 10 addons'
set ylabel 'Number of installations'
set xdata time
set datafile missing "-"
set timefmt "%Y-%m-%d"
set format x "%y-%m-%d"
set datafile sep ' '
set autoscale
set terminal png size 500,300
set output 'stats_addons.png'
set term png tiny
plot for [i=2:*] 'Stats3' using 1:i w l title columnhead(i) smooth csplines
EOFMarker
) || ( gnuplot-nox -persist <<-EOFMarker
set title 'Top 10 addons'
set ylabel 'Number of installations'
set xdata time
set datafile missing "-"
set timefmt "%Y-%m-%d"
set format x "%y-%m-%d"
set datafile sep ' '
set autoscale
set terminal png size 500,300
set output 'stats_addons.png'
set term png tiny
plot for [i=2:*] 'Stats3' using 1:i w l title columnhead(i)
EOFMarker
)
#plot for [i=1:*] 'Stats3' using 0:i
rm Stats3
- name: Create individual stats
run: |
# Prepare data
cp Stats Stats3
# Remove Totals
sed -i "2d" Stats3
# Inverse file
gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3
# For each addon
# shellcheck disable=SC2013
for line in $(awk '{ print $1 }' Stats3); do
TITLE="${line%% *}"
FOLDER="$(grep -irl "ghcr.io/alexbelgium/$TITLE-{arch}" --include="config.*" . | xargs -r dirname)"
FOLDER="${FOLDER:2}"
echo "$TITLE found in $FOLDER"
# If non null
if [[ "${#FOLDER}" -gt 2 ]]; then
sed -n "/Date /p" Stats3 > "$FOLDER"/StatsTmp
sed -n "/$TITLE /p" Stats3 >> "$FOLDER"/StatsTmp
# Go in folder
cd "$FOLDER" || true
cat StatsTmp
# Transpose data
awk '
{
for (i=1; i<=NF; i++) {
a[NR,i] = $i
}
}
NF>p { p = NF }
END {
for(j=1; j<=p; j++) {
str=a[1,j]
for(i=2; i<=NR; i++){
str=str" "a[i,j];
}
print str
}
}' StatsTmp > StatsTmp2 && mv StatsTmp2 StatsTmp
# Plot graph
( gnuplot-nox -persist <<-EOFMarker
set title "$TITLE"
set ylabel 'Number of installations'
set xdata time
set datafile missing "-"
set timefmt "%Y-%m-%d"
set format x "%y-%m-%d"
set datafile sep ' '
set autoscale
set terminal png size 500,300
set output "stats.png"
set term png tiny
plot for [i=2:*] 'StatsTmp' using 1:i w l title columnhead(i) smooth bezier
EOFMarker
) || ( gnuplot-nox -persist <<-EOFMarker
set title "$TITLE"
set ylabel 'Number of installations'
set xdata time
set datafile missing "-"
set timefmt "%Y-%m-%d"
set format x "%y-%m-%d"
set datafile sep ' '
set autoscale
set terminal png size 500,300
set output "stats.png"
set term png tiny
plot for [i=2:*] 'StatsTmp' using 1:i w l title columnhead(i)
EOFMarker
) || true
rm StatsTmp || true
cd .. || true
fi || true
done
# Clean files
rm Stats3
- name: Commit if needed
uses: EndBug/add-and-commit@v9
with:
message: "GitHub bot : README updated"
default_author: github_actions