diff --git a/docs/source/tutorial/_brainstorm.rst b/docs/source/tutorial/_brainstorm.rst index 4b7e2ee..ad8d6a4 100644 --- a/docs/source/tutorial/_brainstorm.rst +++ b/docs/source/tutorial/_brainstorm.rst @@ -38,31 +38,94 @@ ACME's Infrastructure User Journey ------------ -#. Actions over the database. Launch database backup script with an HTTP call. +#. Actions over the server. Launch database backup script with an HTTP call. - - User Learns: Add a route that executes a command locally. - - Kapow! Concepts: `kapow route add` + - User Learns: Add a route that executes a command locally. + - Kapow! Concepts: `kapow route add` + - Problem/Motivation: Each time an ACME project is finished it is + desirable to make a backup of the entire database. Given that the + database server is a critical machine we don't want to grant SSH + access to lowly developers. The script is very fast because the + database is small (for now). + - Solution: Instead of launching the script via SSH shell we can + provide an HTTP endpoint to perform the task. + ``` + ssh user@server + $ ./backup_db.sh + ``` + - Final Kapow!: + ``` + curl -X PUT http://server:8080/db/backup + ``` + ``` + kapow route add -X PUT /db/backup -e ./backup_db.sh + ``` -#. Basic database monitorization +#. Basic server monitoring - - User Learns: Execute local commands and output it results to the HTTP body. - - Kapow! Concepts: `kapow set /response/body` + - User Learns: Execute local commands and output it results to the HTTP body. + - Kapow! Concepts: `kapow set /response/body` + - Problem/Motivation: + - Solution: + - Final Kapow!: + ``` + cat /var/log/backup_db.log | kapow set /response/body + ``` -#. Advanced database monitorization - - User Learns: Compose complex HTTP responses with more than one local command. - - Kapow! Concepts: HEREDOC and subshells +#. Filter over basic monitoring + + - User Learns: Get a parameter from the user and use it to select the + script. + - Kapow! Concepts: `kapow get /request/params` + - Problem/Motivation: + - Solution: + - Final Kapow!: + ``` + LINES="$(kapow get /request/params/lines)" + FILTER="$(kapow get /request/params/filter)" + grep "$FILTER" /var/log/backup_db.log \ + | tail -n"$LINES" \ + | kapow set /response/body + ``` + +#. Advanced database monitoring + + - User Learns: Compose complex HTTP responses with more than one local command. + - Kapow! Concepts: HEREDOC and subshells + - Problem/Motivation: + - Solution: + - Final Kapow!: + ``` + { + echo Memory: + free -m + echo ================================================================================ + echo Load: + uptime + echo ================================================================================ + echo Disk: + df -h + } | kapow set /response/body + ``` #. Share your achievements - - User Learns: Format a complex HTTP response with JSON format to feed the corporate dashboard. - - Kapow! Concepts: backtick interpolation and `kapow set /response/headers` + - User Learns: Format a complex HTTP response with JSON format to feed the corporate dashboard. + - Kapow! Concepts: backtick interpolation and `kapow set /response/headers` + - Problem/Motivation: + - Solution: + - Final Kapow!: + ``` DON'T HANDWRITE JSON + echo "{memory: `free -m`, ...uups..}' | kapow set /response/body + ``` -#. Unifing the interface (???) + ``` USE JQ + MEMORY=$(free -m) + LOAD=$(uptime) + DISK=$(df -h) + jq -nc --arg memory "$MEMORY" '{"memory": $memory}' + ``` - - User Learns: Add logic to the handler. React to a specific request. - - Kapow! Concepts: `kapow get /request/headers` and IF (bash) - - Ideas -----