Opennet Firmware
 Alle Dateien Funktionen Variablen Gruppen Seiten
devel.sh
gehe zur Dokumentation dieser Datei
1 ## @defgroup devel Entwicklungswerkzeuge
2 ## @brief Funktionen, die lediglich für die Firmware-Entwicklung, nicht jedoch zur Laufzeit nützlich sind.
3 # Beginn der Doku-Gruppe
4 ## @{
5 
6 
7 # Ablage fuer profiling-Ergebnisse
8 PROFILING_DIR=/var/run/on-profiling
9 
10 
11 ## @fn list_installed_packages_by_size()
12 ## @brief Zeige alle installierten Pakete und ihren Größenbedarf an.
13 ## @details Dies erlaubt die Analyse des Flash-Bedarfs.
15  local fname
16  find /usr/lib/opkg/info/ -type f -name "*.control" | while read fname; do
17  grep "Installed-Size:" "$fname" \
18  | awk '{print $2, "\t", "'$(basename "${fname%.control}")'" }'
19  done | sort -n | awk 'BEGIN { summe=0 } { summe+=$1; print $0 } END { print summe }'
20 }
21 
22 
23 ## @fn clean_luci_restart()
24 ## @brief Starte den Webserver neu und lösche alle luci-Cache-Dateien und Kompilate.
25 ## @details Diese Funktion sollte nach Änderungen von luci-Templates oder -Code ausgeführt werden.
27  /etc/init.d/uhttpd stop
28  rm -rf /var/luci-*
29  /etc/init.d/uhttpd start
30 }
31 
32 
33 ## @fn run_httpd_debug()
34 ## @brief Starte den Webserver im Debug-Modus zur Beobachtung von lua/luci-Ausgaben.
35 ## @details
37  /etc/init.d/uhttpd stop 2>/dev/null || true
38  rm -rf /var/luci-*
39  # ignoriere CTRL-C (wir ueberlassen das INT-Signal dem uhttpd-Prozess)
40  trap "" INT
41  uhttpd -h /www -p 80 -f
42  /etc/init.d/uhttpd start
43 }
44 
45 
46 ## @fn enable_profiling()
47 ## @brief Manipuliere die Funktionsheader in allen shell-Skripten der opennet-Pakete für das Sammeln von profiling-Informationen.
48 ## @details Diese Operation ist irreversibel - eine erneute Installation der Pakete ist der einzige saubere Weg zurück.
49 ## Die Ergebnisse sind anschließend im PROFILING_DIR verfügbar.
50 ## @see summary_profiling
52  local message=
53  which bash >/dev/null || message="Failed to enable profiling - due to missing bash"
54  [ -e /usr/bin/date ] || message="Failed to enable profiling - due to missing coreutils-date"
55  if [ -z "$message" ]; then
56  # ersetze das shebang in allen Opennet-Skripten
57  cat /usr/lib/opkg/info/on-*.list | grep -E "(bin/|\.sh$|etc/cron\.|/etc/hotplug\.d/|lib/opennet)" \
58  | xargs -n 200 -r sed -i -f "${IPKG_INSTROOT:-}/usr/lib/opennet/profiling.sed"
59  else
60  logger -t "on-profile" "$message"
61  echo >&2 "$message"
62  return 1
63  fi
64 }
65 
66 
67 ## @fn summary_profiling()
68 ## @brief Werte gesammelte profiling-Informationen aus.
69 ## @returns Jede Zeile beschreibt das kumulative Profiling einer Funktion:
70 ## Gesamtzeit, Anzahl der Aufrufe, durchschnittliche Verarbeitungszeit, Funktionsname
71 ## Die Zeiten sind jeweils in Millisekunden angegeben.
72 ## @details Als Verarbeitungszeit einer Funktion gilt dabei der gesamte Zeitunterschied zwischen Funktionseintritt und -ende.
73 ## @see enable_profiling
75  local fname
76  local lines
77  local sum
78  # Kopfzeile
79  printf "%16s %16s %16s %s\n" "Duration [ms]" "Call count" "avgDuration [ms]" "Name"
80  find "$PROFILING_DIR" -type f | while read fname; do
81  # filtere Fehlmessungen (irgendwie tauchen dort Zahlen wie "27323677987" auf)
82  grep -v "^27[0-9]\{9\}$" "$fname" | awk '
83  BEGIN { summe=0; counter=0 }
84  { summe+=($1/1000); counter+=1 }
85  END { printf "%16d %16d %16d %s\n", summe, counter, int(summe/counter), "'$(basename "$fname")'"}'
86  done | sort -n
87 }
88 
89 # Ende der Doku-Gruppe
90 ## @}