mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 14:43:08 +02:00
234 lines
7.1 KiB
Bash
Executable File
234 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[0;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
PROJECT_ROOT=$(pwd)
|
|
TOPICS=("transactions" "alerts")
|
|
|
|
function check_prerequisites {
|
|
echo -e "${BLUE}Checking prerequisites...${NC}"
|
|
|
|
# Check for Java
|
|
if ! command -v java &> /dev/null; then
|
|
echo -e "${RED}Java is not installed. Please install JDK 11 or higher.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for Maven
|
|
if ! command -v mvn &> /dev/null; then
|
|
echo -e "${RED}Maven is not installed. Please install Maven.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for Docker
|
|
if ! command -v docker &> /dev/null; then
|
|
echo -e "${RED}Docker is not installed. Please install Docker.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for docker-compose
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
echo -e "${RED}Docker Compose is not installed. Please install Docker Compose.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}All prerequisites are met.${NC}"
|
|
}
|
|
|
|
function build_projects {
|
|
echo -e "${BLUE}Building all projects...${NC}"
|
|
|
|
# Build each project
|
|
for project in "transaction-simulator" "kafka-consumer-visualizer" "anomaly-detector" "alarm-visualizer"; do
|
|
echo -e "${YELLOW}Building $project...${NC}"
|
|
cd "$PROJECT_ROOT/$project"
|
|
mvn clean package -DskipTests
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "${RED}Failed to build $project.${NC}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
cd "$PROJECT_ROOT"
|
|
echo -e "${GREEN}All projects built successfully.${NC}"
|
|
}
|
|
|
|
function start_infrastructure {
|
|
echo -e "${BLUE}Starting Kafka and Flink containers...${NC}"
|
|
|
|
docker-compose up -d
|
|
|
|
# Wait for Kafka to be ready
|
|
echo -e "${YELLOW}Waiting for Kafka to be ready...${NC}"
|
|
sleep 10
|
|
|
|
# Create Kafka topics
|
|
for topic in "${TOPICS[@]}"; do
|
|
echo -e "${YELLOW}Creating Kafka topic: $topic${NC}"
|
|
docker-compose exec kafka kafka-topics --create \
|
|
--topic "$topic" \
|
|
--bootstrap-server localhost:9092 \
|
|
--partitions 3 \
|
|
--replication-factor 1 \
|
|
--if-not-exists
|
|
done
|
|
|
|
echo -e "${GREEN}Infrastructure is up and running.${NC}"
|
|
}
|
|
|
|
function start_applications {
|
|
echo -e "${BLUE}Starting applications...${NC}"
|
|
|
|
# Start anomaly detector (Flink app)
|
|
echo -e "${YELLOW}Starting Anomaly Detector (Flink App)...${NC}"
|
|
cd "$PROJECT_ROOT/anomaly-detector"
|
|
java -jar target/anomaly-detector-1.0-SNAPSHOT.jar > "$PROJECT_ROOT/logs/anomaly-detector.log" 2>&1 &
|
|
ANOMALY_DETECTOR_PID=$!
|
|
echo $ANOMALY_DETECTOR_PID > "$PROJECT_ROOT/logs/anomaly-detector.pid"
|
|
|
|
sleep 5
|
|
|
|
# Start alarm visualizer
|
|
echo -e "${YELLOW}Starting Alarm Visualizer...${NC}"
|
|
cd "$PROJECT_ROOT/alarm-visualizer"
|
|
java -jar target/alarm-visualizer-1.0-SNAPSHOT.jar > "$PROJECT_ROOT/logs/alarm-visualizer.log" 2>&1 &
|
|
ALARM_VISUALIZER_PID=$!
|
|
echo $ALARM_VISUALIZER_PID > "$PROJECT_ROOT/logs/alarm-visualizer.pid"
|
|
|
|
# Start test consumer/visualizer
|
|
echo -e "${YELLOW}Starting Test Consumer Visualizer...${NC}"
|
|
cd "$PROJECT_ROOT/kafka-consumer-visualizer"
|
|
java -jar target/kafka-consumer-visualizer-1.0-SNAPSHOT.jar > "$PROJECT_ROOT/logs/consumer-visualizer.log" 2>&1 &
|
|
CONSUMER_PID=$!
|
|
echo $CONSUMER_PID > "$PROJECT_ROOT/logs/consumer-visualizer.pid"
|
|
|
|
sleep 5
|
|
|
|
# Start transaction simulator
|
|
echo -e "${YELLOW}Starting Transaction Simulator...${NC}"
|
|
cd "$PROJECT_ROOT/transaction-simulator"
|
|
java -jar target/transaction-simulator-1.0-SNAPSHOT.jar > "$PROJECT_ROOT/logs/transaction-simulator.log" 2>&1 &
|
|
SIMULATOR_PID=$!
|
|
echo $SIMULATOR_PID > "$PROJECT_ROOT/logs/transaction-simulator.pid"
|
|
|
|
cd "$PROJECT_ROOT"
|
|
echo -e "${GREEN}All applications are running.${NC}"
|
|
echo -e "${GREEN}Log files are available in the logs directory.${NC}"
|
|
}
|
|
|
|
function stop_applications {
|
|
echo -e "${BLUE}Stopping applications...${NC}"
|
|
|
|
# Stop all Java applications
|
|
if [ -f "$PROJECT_ROOT/logs/transaction-simulator.pid" ]; then
|
|
kill $(cat "$PROJECT_ROOT/logs/transaction-simulator.pid") 2>/dev/null
|
|
rm "$PROJECT_ROOT/logs/transaction-simulator.pid"
|
|
fi
|
|
|
|
if [ -f "$PROJECT_ROOT/logs/consumer-visualizer.pid" ]; then
|
|
kill $(cat "$PROJECT_ROOT/logs/consumer-visualizer.pid") 2>/dev/null
|
|
rm "$PROJECT_ROOT/logs/consumer-visualizer.pid"
|
|
fi
|
|
|
|
if [ -f "$PROJECT_ROOT/logs/anomaly-detector.pid" ]; then
|
|
kill $(cat "$PROJECT_ROOT/logs/anomaly-detector.pid") 2>/dev/null
|
|
rm "$PROJECT_ROOT/logs/anomaly-detector.pid"
|
|
fi
|
|
|
|
if [ -f "$PROJECT_ROOT/logs/alarm-visualizer.pid" ]; then
|
|
kill $(cat "$PROJECT_ROOT/logs/alarm-visualizer.pid") 2>/dev/null
|
|
rm "$PROJECT_ROOT/logs/alarm-visualizer.pid"
|
|
fi
|
|
|
|
echo -e "${GREEN}All applications stopped.${NC}"
|
|
}
|
|
|
|
function stop_infrastructure {
|
|
echo -e "${BLUE}Stopping infrastructure...${NC}"
|
|
|
|
docker-compose down
|
|
|
|
echo -e "${GREEN}Infrastructure stopped.${NC}"
|
|
}
|
|
|
|
function show_logs {
|
|
echo -e "${BLUE}Available logs:${NC}"
|
|
ls -l "$PROJECT_ROOT/logs"
|
|
|
|
echo -e "${YELLOW}Use 'tail -f logs/[filename]' to view a specific log.${NC}"
|
|
}
|
|
|
|
function print_usage {
|
|
echo -e "${BLUE}Credit Card Transaction Anomaly Detection System${NC}"
|
|
echo -e "Usage: $0 [options]"
|
|
echo -e "Options:"
|
|
echo -e " ${GREEN}start${NC} Build and start the entire system"
|
|
echo -e " ${GREEN}stop${NC} Stop all components"
|
|
echo -e " ${GREEN}restart${NC} Restart the entire system"
|
|
echo -e " ${GREEN}status${NC} Check if components are running"
|
|
echo -e " ${GREEN}logs${NC} Show log files"
|
|
}
|
|
|
|
function check_status {
|
|
echo -e "${BLUE}Checking system status...${NC}"
|
|
|
|
# Check Docker containers
|
|
echo -e "${YELLOW}Docker containers:${NC}"
|
|
docker-compose ps
|
|
|
|
# Check Java processes
|
|
echo -e "\n${YELLOW}Java applications:${NC}"
|
|
for app in "transaction-simulator" "consumer-visualizer" "anomaly-detector" "alarm-visualizer"; do
|
|
if [ -f "$PROJECT_ROOT/logs/$app.pid" ]; then
|
|
pid=$(cat "$PROJECT_ROOT/logs/$app.pid")
|
|
if ps -p $pid > /dev/null; then
|
|
echo -e "${GREEN}$app is running (PID: $pid)${NC}"
|
|
else
|
|
echo -e "${RED}$app is not running (stale PID file)${NC}"
|
|
fi
|
|
else
|
|
echo -e "${RED}$app is not running${NC}"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Create logs directory
|
|
mkdir -p "$PROJECT_ROOT/logs"
|
|
|
|
# Parse command-line arguments
|
|
case "$1" in
|
|
start)
|
|
check_prerequisites
|
|
build_projects
|
|
start_infrastructure
|
|
start_applications
|
|
;;
|
|
stop)
|
|
stop_applications
|
|
stop_infrastructure
|
|
;;
|
|
restart)
|
|
stop_applications
|
|
stop_infrastructure
|
|
sleep 5
|
|
start_infrastructure
|
|
sleep 5
|
|
start_applications
|
|
;;
|
|
status)
|
|
check_status
|
|
;;
|
|
logs)
|
|
show_logs
|
|
;;
|
|
*)
|
|
print_usage
|
|
;;
|
|
esac
|