55RED=' \033[0;31m'
66GREEN=' \033[0;32m'
77YELLOW=' \033[1;33m'
8+ BLUE=' \033[0;34m'
89NC=' \033[0m' # No Color
910
11+ START_TIME=$( date +%s)
12+
1013log () {
1114 echo -e " ${GREEN} [coBoarding]${NC} $1 "
1215}
@@ -16,46 +19,304 @@ warn() {
1619err () {
1720 echo -e " ${RED} [coBoarding]${NC} $1 " >&2
1821}
22+ info () {
23+ echo -e " ${BLUE} [coBoarding]${NC} $1 "
24+ }
25+
26+ # Funkcja do wyświetlania paska postępu
27+ progress_bar () {
28+ local current=$1
29+ local total=$2
30+ local message=$3
31+ local bar_size=40
32+ local progress=$(( current * bar_size / total))
33+ local percentage=$(( current * 100 / total))
34+
35+ # Tworzenie paska postępu
36+ local bar=" ["
37+ for (( i= 0 ; i< bar_size; i++ )) ; do
38+ if [ $i -lt $progress ]; then
39+ bar+=" ="
40+ else
41+ bar+=" "
42+ fi
43+ done
44+ bar+=" ] ${percentage} %"
45+
46+ # Wyświetlanie paska postępu
47+ echo -ne " \r${BLUE} [coBoarding]${NC} ${message} ${bar} "
48+
49+ # Jeśli to ostatni krok, dodaj nową linię
50+ if [ $current -eq $total ]; then
51+ echo " "
52+ fi
53+ }
54+
55+ # Funkcja do zapisywania stanu kontenerów przed zatrzymaniem
56+ save_container_state () {
57+ local state_file=" ./container_state.log"
58+ info " Zapisywanie stanu kontenerów przed zatrzymaniem..."
59+
60+ {
61+ echo " === Stan kontenerów przed zatrzymaniem ==="
62+ echo " Data: $( date ' +%Y-%m-%d %H:%M:%S' ) "
63+ echo " "
64+
65+ echo " === Uruchomione kontenery ==="
66+ docker ps -a
67+ echo " "
68+
69+ echo " === Statystyki kontenerów ==="
70+ docker stats --no-stream
71+ echo " "
72+
73+ echo " === Wolumeny Docker ==="
74+ docker volume ls | grep " coboarding"
75+ echo " "
76+
77+ echo " === Obrazy Docker ==="
78+ docker images | grep -E ' llm-orchestrator-min|browser-service|novnc'
79+ echo " "
80+ } > " $state_file "
81+
82+ log " Stan kontenerów został zapisany w pliku: $state_file "
83+ }
84+
85+ # Funkcja do czyszczenia wolumenów
86+ clean_volumes () {
87+ info " Czyszczenie wolumenów Docker..."
88+
89+ local volumes=(" coboarding-pip-cache" " coboarding-wheel-cache" " coboarding-models-cache" " coboarding-chrome-cache" )
90+ local total=${# volumes[@]}
91+ local current=0
92+
93+ for volume in " ${volumes[@]} " ; do
94+ current=$(( current + 1 ))
95+ progress_bar $current $total " Usuwanie wolumenów Docker..."
96+
97+ if docker volume inspect " $volume " & > /dev/null; then
98+ docker volume rm " $volume " & > /dev/null || warn " Nie udało się usunąć wolumenu $volume ."
99+ fi
100+ done
101+
102+ log " Wolumeny Docker zostały wyczyszczone."
103+ }
104+
105+ # Parsowanie argumentów wiersza poleceń
106+ SAVE_STATE=false
107+ CLEAN_VOLUMES=false
108+ REMOVE_IMAGES=false
109+ FORCE=false
110+ VERBOSE=false
111+
112+ while [[ $# -gt 0 ]]; do
113+ case $1 in
114+ --save-state)
115+ SAVE_STATE=true
116+ info " Włączono zapisywanie stanu kontenerów."
117+ shift
118+ ;;
119+ --clean-volumes)
120+ CLEAN_VOLUMES=true
121+ info " Włączono czyszczenie wolumenów."
122+ shift
123+ ;;
124+ --remove-images)
125+ REMOVE_IMAGES=true
126+ info " Włączono usuwanie obrazów."
127+ shift
128+ ;;
129+ --force|-f)
130+ FORCE=true
131+ info " Włączono tryb wymuszony (force)."
132+ shift
133+ ;;
134+ --verbose|-v)
135+ VERBOSE=true
136+ info " Włączono tryb szczegółowy (verbose)."
137+ shift
138+ ;;
139+ --help|-h)
140+ echo " Użycie: ./stop.sh [opcje]"
141+ echo " Opcje:"
142+ echo " --save-state Zapisuje stan kontenerów przed zatrzymaniem"
143+ echo " --clean-volumes Czyści wolumeny Docker"
144+ echo " --remove-images Usuwa obrazy Docker"
145+ echo " --force, -f Wymusza operacje bez pytania"
146+ echo " --verbose, -v Włącza tryb szczegółowy (verbose)"
147+ echo " --help, -h Wyświetla tę pomoc"
148+ exit 0
149+ ;;
150+ * )
151+ err " Nieznana opcja: $1 "
152+ echo " Użyj --help, aby wyświetlić dostępne opcje."
153+ exit 1
154+ ;;
155+ esac
156+ done
157+
158+ # Zapisywanie stanu kontenerów przed zatrzymaniem
159+ if [ " $SAVE_STATE " = true ]; then
160+ save_container_state
161+ fi
162+
163+ info " === Zatrzymywanie środowiska coBoarding ==="
164+
165+ # Wyświetlanie informacji o aktualnie uruchomionych kontenerach
166+ if [ " $VERBOSE " = true ]; then
167+ info " Aktualnie uruchomione kontenery:"
168+ docker ps
169+ echo " "
170+ fi
19171
20172log " Zatrzymywanie wszystkich środowisk testowych docker-compose.<service>.yml..."
21173SERVICES=(llm-orchestrator browser-service web-interface novnc video-chat web-terminal)
174+ TOTAL_SERVICES=${# SERVICES[@]}
175+ CURRENT=0
176+
22177for SERVICE in " ${SERVICES[@]} " ; do
178+ CURRENT=$(( CURRENT + 1 ))
23179 COMPOSE_FILE=" docker-compose.$SERVICE .yml"
180+
24181 if [ -f " $COMPOSE_FILE " ]; then
25- log " Zatrzymuję środowisko dla: $SERVICE ($COMPOSE_FILE ) ..."
26- docker-compose -f " $COMPOSE_FILE " down || warn " Nie udało się zatrzymać środowiska $SERVICE ."
182+ if [ " $VERBOSE " = true ]; then
183+ info " Zatrzymuję środowisko dla: $SERVICE ($COMPOSE_FILE ) ..."
184+ docker-compose -f " $COMPOSE_FILE " down || warn " Nie udało się zatrzymać środowiska $SERVICE ."
185+ else
186+ progress_bar $CURRENT $TOTAL_SERVICES " Zatrzymywanie środowisk testowych..."
187+ docker-compose -f " $COMPOSE_FILE " down & > /dev/null || warn " Nie udało się zatrzymać środowiska $SERVICE ."
188+ fi
27189 fi
28190done
29191
30192log " Zatrzymywanie środowiska minimalnego (docker-compose.min.yml)..."
31193if [ -f " docker-compose.min.yml" ]; then
32- docker-compose -f docker-compose.min.yml down || warn " Nie udało się zatrzymać środowiska minimalnego."
194+ if [ " $VERBOSE " = true ]; then
195+ docker-compose -f docker-compose.min.yml down || warn " Nie udało się zatrzymać środowiska minimalnego."
196+ else
197+ docker-compose -f docker-compose.min.yml down & > /dev/null || warn " Nie udało się zatrzymać środowiska minimalnego."
198+ fi
33199fi
34200
35201log " Zatrzymywanie wszystkich usług docker-compose..."
36- docker compose down || docker-compose down || warn " docker-compose down nie powiodło się (brak pliku lub usługi)"
202+ if [ " $VERBOSE " = true ]; then
203+ docker compose down || docker-compose down || warn " docker-compose down nie powiodło się (brak pliku lub usługi)"
204+ else
205+ docker compose down & > /dev/null || docker-compose down & > /dev/null || warn " docker-compose down nie powiodło się (brak pliku lub usługi)"
206+ fi
37207
38208log " Usuwanie wszystkich kontenerów dockera powiązanych z projektem..."
39209PROJECT_CONTAINERS=$( docker ps -a --filter " name=coboarding" --format " {{.ID}}" )
40210if [ -n " $PROJECT_CONTAINERS " ]; then
41- docker rm -f $PROJECT_CONTAINERS || warn " Nie udało się usunąć niektórych kontenerów."
211+ if [ " $VERBOSE " = true ]; then
212+ docker rm -f $PROJECT_CONTAINERS || warn " Nie udało się usunąć niektórych kontenerów."
213+ else
214+ docker rm -f $PROJECT_CONTAINERS & > /dev/null || warn " Nie udało się usunąć niektórych kontenerów."
215+ fi
42216else
43217 warn " Brak kontenerów powiązanych z projektem coboarding."
44218fi
45219
46220# Usuwanie kontenerów z wersji minimalnej
47221MIN_CONTAINERS=" llm-orchestrator-min browser-service novnc"
222+ TOTAL_MIN_CONTAINERS=$( echo " $MIN_CONTAINERS " | wc -w)
223+ CURRENT=0
224+
48225for CONTAINER in $MIN_CONTAINERS ; do
226+ CURRENT=$(( CURRENT + 1 ))
227+
49228 if docker ps -a --filter " name=$CONTAINER " -q | grep -q . ; then
50- log " Usuwanie kontenera $CONTAINER ..."
51- docker rm -f $CONTAINER || warn " Nie udało się usunąć kontenera $CONTAINER ."
229+ if [ " $VERBOSE " = true ]; then
230+ info " Usuwanie kontenera $CONTAINER ..."
231+ docker rm -f $CONTAINER || warn " Nie udało się usunąć kontenera $CONTAINER ."
232+ else
233+ progress_bar $CURRENT $TOTAL_MIN_CONTAINERS " Usuwanie kontenerów minimalnych..."
234+ docker rm -f $CONTAINER & > /dev/null || warn " Nie udało się usunąć kontenera $CONTAINER ."
235+ fi
52236 fi
53237done
54238
55239log " Usuwanie nieużywanych sieci docker..."
56- docker network prune -f || warn " Nie udało się wyczyścić sieci docker."
240+ if [ " $VERBOSE " = true ]; then
241+ docker network prune -f || warn " Nie udało się wyczyścić sieci docker."
242+ else
243+ docker network prune -f & > /dev/null || warn " Nie udało się wyczyścić sieci docker."
244+ fi
245+
246+ # Czyszczenie wolumenów Docker
247+ if [ " $CLEAN_VOLUMES " = true ]; then
248+ if [ " $FORCE " = true ]; then
249+ clean_volumes
250+ else
251+ read -p " Czy na pewno chcesz usunąć wszystkie wolumeny Docker? (t/n): " answer
252+ if [[ " $answer " =~ ^[Tt]$ ]]; then
253+ clean_volumes
254+ else
255+ info " Pomijanie czyszczenia wolumenów Docker."
256+ fi
257+ fi
258+ else
259+ log " Usuwanie nieużywanych wolumenów docker..."
260+ if [ " $VERBOSE " = true ]; then
261+ docker volume prune -f || warn " Nie udało się wyczyścić wolumenów docker."
262+ else
263+ docker volume prune -f & > /dev/null || warn " Nie udało się wyczyścić wolumenów docker."
264+ fi
265+ fi
57266
58- log " Usuwanie nieużywanych wolumenów docker..."
59- docker volume prune -f || warn " Nie udało się wyczyścić wolumenów docker."
267+ # Usuwanie obrazów Docker
268+ if [ " $REMOVE_IMAGES " = true ]; then
269+ info " Usuwanie obrazów Docker..."
270+
271+ if [ " $FORCE " = true ]; then
272+ for image in " llm-orchestrator-min" " browser-service" " novnc" ; do
273+ if docker images | grep -q " $image " ; then
274+ if [ " $VERBOSE " = true ]; then
275+ info " Usuwanie obrazu $image ..."
276+ docker rmi $image || warn " Nie udało się usunąć obrazu $image ."
277+ else
278+ docker rmi $image & > /dev/null || warn " Nie udało się usunąć obrazu $image ."
279+ fi
280+ fi
281+ done
282+ log " Obrazy Docker zostały usunięte."
283+ else
284+ read -p " Czy na pewno chcesz usunąć wszystkie obrazy Docker? (t/n): " answer
285+ if [[ " $answer " =~ ^[Tt]$ ]]; then
286+ for image in " llm-orchestrator-min" " browser-service" " novnc" ; do
287+ if docker images | grep -q " $image " ; then
288+ if [ " $VERBOSE " = true ]; then
289+ info " Usuwanie obrazu $image ..."
290+ docker rmi $image || warn " Nie udało się usunąć obrazu $image ."
291+ else
292+ docker rmi $image & > /dev/null || warn " Nie udało się usunąć obrazu $image ."
293+ fi
294+ fi
295+ done
296+ log " Obrazy Docker zostały usunięte."
297+ else
298+ info " Pomijanie usuwania obrazów Docker."
299+ fi
300+ fi
301+ fi
60302
61303log " Wszystkie usługi zatrzymane i kontenery usunięte."
304+
305+ # Wyświetlanie czasu wykonania skryptu
306+ END_TIME=$( date +%s)
307+ EXECUTION_TIME=$(( END_TIME - START_TIME))
308+ info " Czas wykonania skryptu: ${EXECUTION_TIME} s"
309+
310+ # Wyświetlanie podsumowania
311+ info " === Podsumowanie ==="
312+ info " - Wszystkie kontenery zostały zatrzymane i usunięte"
313+ if [ " $CLEAN_VOLUMES " = true ]; then
314+ info " - Wolumeny Docker zostały wyczyszczone"
315+ fi
316+ if [ " $REMOVE_IMAGES " = true ]; then
317+ info " - Obrazy Docker zostały usunięte"
318+ fi
319+ if [ " $SAVE_STATE " = true ]; then
320+ info " - Stan kontenerów został zapisany w pliku: ./container_state.log"
321+ fi
322+ info " Aby uruchomić środowisko ponownie, użyj: ./runmin.sh"
0 commit comments