diff --git a/.github/workflows/aws.yml b/.github/workflows/aws.yml new file mode 100644 index 0000000..7909099 --- /dev/null +++ b/.github/workflows/aws.yml @@ -0,0 +1,83 @@ +name: Deploy to AWS ECS + +on: + push: + branches: ['main'] # Triggers on push to main + +concurrency: + group: deploy-${{ github.ref }} + cancel-in-progress: true + +env: + ECR_REPOSITORY: app # Set this to your Amazon ECR repository name + ECS_SERVICE: SkyDevOps # Set this to your Amazon ECS service name + ECS_CLUSTER: Sky # Set this to your Amazon ECS cluster name + +permissions: + contents: read + +jobs: + deploy: + name: Deploy to AWS ECS + runs-on: ubuntu-latest + environment: production + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + + - name: Login to AWS ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + + - name: Build and push new Docker image to AWS ECR + id: build-image + env: + ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} + IMAGE_TAG: latest + run: | + # Use Docker Buildx to build the image for x86_64 + docker buildx build --platform linux/amd64 --push -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . + + echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT + echo "Docker image $ECR_REPOSITORY:$IMAGE_TAG has been built and pushed to $ECR_REGISTRY" + + - name: Deploy to AWS ECS + run: | + # Update the ECS service + aws ecs update-service --cluster ${{ env.ECS_CLUSTER }} --service ${{ env.ECS_SERVICE }} --force-new-deployment + + # Define the website URL and the desired status code + WEBSITE_URL="https://skyscraper-api.com" + EXPECTED_STATUS_CODE=200 + + # Loop until the website returns the expected status code + # Wait 30 seconds before sending request + sleep 30 + while true; do + # Send a HEAD request to the website and capture the HTTP status code + HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" $WEBSITE_URL) + + # Check if the status code matches the expected status code + if [ "$HTTP_STATUS" -eq "$EXPECTED_STATUS_CODE" ]; then + echo "Website is back up with status code $HTTP_STATUS" + break + else + echo "Website down. Current status code: $HTTP_STATUS" + fi + + # Wait 20 seconds before the next check + sleep 20 + done + echo "Website online" + echo "Deployment successful" diff --git a/Dockerfile b/Dockerfile index cfd8983..9b38891 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20 +FROM public.ecr.aws/docker/library/node:20-alpine # Set the working directory WORKDIR /usr/src/app @@ -7,13 +7,14 @@ WORKDIR /usr/src/app COPY package*.json ./ # Install dependencies +RUN npm install -g npm@latest RUN npm install # Copy the rest of the application code COPY ./client ./client COPY ./server ./server -# Build the client and server +# Build the server and client RUN npm run build:server RUN npm run build:prd diff --git a/README.md b/README.md index c10cc44..4d479ad 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

- Logo + Logo

SkyScraper

@@ -15,7 +15,7 @@ Visualizer Dashboard for AWS EC2 Instances
Report Bug - ยท + | Request Feature

@@ -56,7 +56,7 @@

- +

SkyScraper is an innovative visualizer dashboard that transforms the way developers interact with AWS performance data, starting with EC2. By offering a streamlined, intuitive interface, SkyScraper optimizes the retrieval, organization, and visualization of performance metrics, enabling users to manage their AWS environments effectively. @@ -67,17 +67,17 @@ Designed with a focus on clarity and aesthetics, SkyScraper features custom them ### Built With -- [](https://www.typescriptlang.org/) [TypeScript](https://www.typescriptlang.org/) -- [](https://reactjs.org/) [React](https://reactjs.org/) -- [](https://redux-toolkit.js.org/) [Redux](https://redux-toolkit.js.org/) -- [](https://nodejs.org/en) [Node.js](https://nodejs.org/en) -- [](https://expressjs.com/) [Express](https://expressjs.com/) -- [](https://www.chartjs.org/) [Chart.js](https://www.chartjs.org/) -- [](https://webpack.js.org/) [Webpack](https://webpack.js.org/) -- [](https://auth0.com/) [Auth0](https://auth0.com/) -- [](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/Welcome.html) [AWS Cognito API](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/Welcome.html) -- [](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/Welcome.html) [AWS CloudWatch API](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/Welcome.html) -- [](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html) [AWS EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html) +- [](https://www.typescriptlang.org/) [TypeScript](https://www.typescriptlang.org/) +- [](https://reactjs.org/) [React](https://reactjs.org/) +- [](https://redux-toolkit.js.org/) [Redux](https://redux-toolkit.js.org/) +- [](https://nodejs.org/en) [Node.js](https://nodejs.org/en) +- [](https://expressjs.com/) [Express](https://expressjs.com/) +- [](https://www.chartjs.org/) [Chart.js](https://www.chartjs.org/) +- [](https://webpack.js.org/) [Webpack](https://webpack.js.org/) +- [](https://auth0.com/) [Auth0](https://auth0.com/) +- [](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/Welcome.html) [AWS Cognito API](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/Welcome.html) +- [](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/Welcome.html) [AWS CloudWatch API](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/Welcome.html) +- [](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html) [AWS EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html)

(back to top)

@@ -150,25 +150,25 @@ Distributed under the MIT License. See [`LICENSE`](https://github.com/oslabs-bet ## Creators -[](https://github.com/abelr20) [](https://www.linkedin.com/in/abel-ratanaphan/) Abel Ratanaphan +[](https://github.com/abelr20) [](https://www.linkedin.com/in/abel-ratanaphan/) Abel Ratanaphan -[](https://github.com/b-the-coder) [](https://www.linkedin.com/in/bin-emma-he/) Bin He +[](https://github.com/b-the-coder) [](https://www.linkedin.com/in/bin-emma-he/) Bin He -[](https://github.com/ChristieLaf) [](https://www.linkedin.com/in/christie-laferriere/) Christie Laferriere +[](https://github.com/ChristieLaf) [](https://www.linkedin.com/in/christie-laferriere/) Christie Laferriere -[](https://github.com/TrippMurphy) [](https://www.linkedin.com/in/trippmurphy/) Tripp Murphy +[](https://github.com/TrippMurphy) [](https://www.linkedin.com/in/trippmurphy/) Tripp Murphy -[](https://github.com/Nikolaa92) [](https://www.linkedin.com/in/nikola-andelkovic/) Nikola Andelkovic +[](https://github.com/Nikolaa92) [](https://www.linkedin.com/in/nikola-andelkovic/) Nikola Andelkovic

(back to top)

## Contact Us - AppSkyScraper@gmail.com + AppSkyScraper@gmail.com -[]() [@SkyScraperApp](https://x.com/SkyScraperApp) +[]() [@SkyScraperApp](https://x.com/SkyScraperApp) -[]() [github.com/oslabs-beta/SkyScraper](https://github.com/oslabs-beta/SkyScraper/) +[]() [github.com/oslabs-beta/SkyScraper](https://github.com/oslabs-beta/SkyScraper/)

(back to top)

diff --git a/client/public/favicon.ico b/client/public/favicon.ico new file mode 100644 index 0000000..d0a1d4b Binary files /dev/null and b/client/public/favicon.ico differ diff --git a/client/public/index.html b/client/public/index.html index f8c61f0..dd45262 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -1,4 +1,3 @@ - @@ -6,11 +5,19 @@ SkyScraper + + - + + + + + + + diff --git a/client/src/App.tsx b/client/src/App.tsx index 38f6595..2803348 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -6,7 +6,7 @@ import DashboardPage from './features/dashboard/DashboardPage'; import EC2MonitorPage from './features/ec2Monitor/EC2MonitorPage'; import NavBar from './features/navbar/Navbar'; import './styles/styles.css'; -import './styles/Navbar.css'; +import './styles/Nav.css'; import './styles/LoginPage.css'; import './styles/HomePage.css'; diff --git a/client/src/assets/EC2Logo.ts b/client/src/assets/EC2.ts similarity index 99% rename from client/src/assets/EC2Logo.ts rename to client/src/assets/EC2.ts index d78f64c..504ba90 100644 --- a/client/src/assets/EC2Logo.ts +++ b/client/src/assets/EC2.ts @@ -1,4 +1,4 @@ -const EC2logo = +const EC2 = 'data:image/jpeg;base64,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'; -export default EC2logo; +export default EC2; diff --git a/client/src/assets/EC2logo.ts b/client/src/assets/EC2logo.ts deleted file mode 100644 index d78f64c..0000000 --- a/client/src/assets/EC2logo.ts +++ /dev/null @@ -1,4 +0,0 @@ -const EC2logo = - 'data:image/jpeg;base64,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'; - -export default EC2logo; diff --git a/client/src/features/auth/authAPI.ts b/client/src/features/auth/authAPI.ts index 5625108..e5ee41e 100644 --- a/client/src/features/auth/authAPI.ts +++ b/client/src/features/auth/authAPI.ts @@ -5,7 +5,13 @@ import { EC2Instance, EC2Stats } from '../../app/types'; export const authApi = createApi({ reducerPath: 'authApi', baseQuery: fetchBaseQuery({ + + // Production baseURL baseUrl: 'https://skyscraper-api.com/api/', + + // Development baseURL + // baseUrl: 'http://localhost:8080/api/', + prepareHeaders: (headers, { getState }) => { const state = getState() as RootState; const { access_token, id_token } = state.rootReducer.auth.tokens; diff --git a/client/src/features/auth/components/LoginButton.tsx b/client/src/features/auth/components/LoginButton.tsx index 4ff3971..bf9625c 100644 --- a/client/src/features/auth/components/LoginButton.tsx +++ b/client/src/features/auth/components/LoginButton.tsx @@ -3,7 +3,11 @@ import React from 'react'; const LoginButton: React.FC = () => { const navigate = () => { window.location.href = + // Production URI 'https://skyscraperwerock.auth.us-east-2.amazoncognito.com/oauth2/authorize?client_id=6hjtfh1ddmn4afj4c29ddijj32&response_type=token&scope=email+openid+phone+profile&redirect_uri=https%3A%2F%2Fskyscraper-api.com%2Fdashboard'; + + // Development URI + // 'https://skyscraperwerock.auth.us-east-2.amazoncognito.com/oauth2/authorize?client_id=6hjtfh1ddmn4afj4c29ddijj32&response_type=token&scope=email+openid+phone+profile&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fdashboard'; }; return ( diff --git a/client/src/features/dashboard/DashboardPage.tsx b/client/src/features/dashboard/DashboardPage.tsx index 15a6b68..e251796 100644 --- a/client/src/features/dashboard/DashboardPage.tsx +++ b/client/src/features/dashboard/DashboardPage.tsx @@ -4,7 +4,7 @@ import { useAppDispatch, useAppSelector } from '../../app/hooks'; import { EC2Instance } from '../../app/types'; import { useGetEC2Query } from '../auth/authAPI'; import { setTokens } from '../auth/authSlice'; -import EC2Logo from '../../assets/EC2logo'; +import EC2Logo from '../../assets/EC2'; const DashboardPage: React.FC = () => { const dispatch = useAppDispatch(); diff --git a/client/src/features/homepage/HomePage.tsx b/client/src/features/homepage/HomePage.tsx index 6d83f3a..ce0cbd6 100644 --- a/client/src/features/homepage/HomePage.tsx +++ b/client/src/features/homepage/HomePage.tsx @@ -29,7 +29,7 @@ const HomePage: React.FC = () => {
-

Welcome to SkyScraper

+

Welcome to SkyScraper

{' '} diff --git a/client/src/styles/navbar.css b/client/src/styles/Nav.css similarity index 100% rename from client/src/styles/navbar.css rename to client/src/styles/Nav.css diff --git a/client/webpack.config.js b/client/webpack.config.js index e92aacb..1dc12e2 100644 --- a/client/webpack.config.js +++ b/client/webpack.config.js @@ -44,6 +44,7 @@ const config = { new HtmlWebpackPlugin({ template: './client/public/index.html', filename: 'index.html', + favicon: './client/public/favicon.ico', }), new MiniCssExtractPlugin({ filename: 'bundle.css', diff --git a/ecs-task-def.json b/ecs-task-def.json new file mode 100644 index 0000000..d56c2e8 --- /dev/null +++ b/ecs-task-def.json @@ -0,0 +1,63 @@ +{ + "family": "ecs-task-def", + "containerDefinitions": [ + { + "name": "app", + "image": "992382810552.dkr.ecr.us-east-1.amazonaws.com/app:latest", + "cpu": 0, + "portMappings": [ + { + "name": "app-8080-tcp", + "containerPort": 8080, + "hostPort": 8080, + "protocol": "tcp" + } + ], + "essential": true, + "environment": [ + { + "name": "PROD_PORT", + "value": "8080" + }, + { + "name": "CLIENT_ID", + "value": "6hjtfh1ddmn4afj4c29ddijj32" + }, + { + "name": "DEV_PORT", + "value": "8080" + }, + { + "name": "IDENTITY_POOL_ID", + "value": "us-east-2:ef0095f5-b5d4-4ed4-a40a-262f8022e37d" + }, + { + "name": "NODE_ENV", + "value": "development" + }, + { + "name": "USER_POOL_ID", + "value": "us-east-2_53sjBSg4Y" + }, + { + "name": "REGION", + "value": "us-east-2" + } + ], + "mountPoints": [], + "volumesFrom": [], + "ulimits": [], + "systemControls": [] + } + ], + "taskRoleArn": "arn:aws:iam::992382810552:role/ecsTaskExecutionRole", + "executionRoleArn": "arn:aws:iam::992382810552:role/ecsTaskExecutionRole", + "networkMode": "awsvpc", + "requiresCompatibilities": ["FARGATE"], + "cpu": "512", + "memory": "1024", + "runtimePlatform": { + "cpuArchitecture": "X86_64", + "operatingSystemFamily": "LINUX" + } +} diff --git a/client/src/assets/images/Auth0.png b/images/Auth0.png similarity index 100% rename from client/src/assets/images/Auth0.png rename to images/Auth0.png diff --git a/client/src/assets/images/chartjs.png b/images/Chartjs.png similarity index 100% rename from client/src/assets/images/chartjs.png rename to images/Chartjs.png diff --git a/client/src/assets/images/CircleLogo.png b/images/CircleLogo.png similarity index 100% rename from client/src/assets/images/CircleLogo.png rename to images/CircleLogo.png diff --git a/client/src/assets/images/CloudWatch.png b/images/CloudWatch.png similarity index 100% rename from client/src/assets/images/CloudWatch.png rename to images/CloudWatch.png diff --git a/client/src/assets/images/Cognito.png b/images/Cognito.png similarity index 100% rename from client/src/assets/images/Cognito.png rename to images/Cognito.png diff --git a/client/src/assets/images/EC2.png b/images/EC2.png similarity index 100% rename from client/src/assets/images/EC2.png rename to images/EC2.png diff --git a/client/src/assets/images/Express.png b/images/Express.png similarity index 100% rename from client/src/assets/images/Express.png rename to images/Express.png diff --git a/client/src/assets/images/FlatLogo.png b/images/FlatLogo.png similarity index 100% rename from client/src/assets/images/FlatLogo.png rename to images/FlatLogo.png diff --git a/client/src/assets/images/GitHubBlack.png b/images/GitHubBlack.png similarity index 100% rename from client/src/assets/images/GitHubBlack.png rename to images/GitHubBlack.png diff --git a/client/src/assets/images/GitHubWhite.png b/images/GitHubWhite.png similarity index 100% rename from client/src/assets/images/GitHubWhite.png rename to images/GitHubWhite.png diff --git a/client/src/assets/images/LinkedIn.png b/images/LinkedIn.png similarity index 100% rename from client/src/assets/images/LinkedIn.png rename to images/LinkedIn.png diff --git a/client/src/assets/images/Mail.png b/images/Mail.png similarity index 100% rename from client/src/assets/images/Mail.png rename to images/Mail.png diff --git a/images/Nodejs.png b/images/Nodejs.png new file mode 100644 index 0000000..9e216b9 Binary files /dev/null and b/images/Nodejs.png differ diff --git a/client/src/assets/images/React.png b/images/React.png similarity index 100% rename from client/src/assets/images/React.png rename to images/React.png diff --git a/client/src/assets/images/Redux.png b/images/Redux.png similarity index 100% rename from client/src/assets/images/Redux.png rename to images/Redux.png diff --git a/client/src/assets/images/TS.png b/images/TS.png similarity index 100% rename from client/src/assets/images/TS.png rename to images/TS.png diff --git a/client/src/assets/images/Webpack.png b/images/Webpack.png similarity index 100% rename from client/src/assets/images/Webpack.png rename to images/Webpack.png diff --git a/client/src/assets/images/XBlack.png b/images/XBlack.png similarity index 100% rename from client/src/assets/images/XBlack.png rename to images/XBlack.png diff --git a/client/src/assets/images/XWhite.png b/images/XWhite.png similarity index 100% rename from client/src/assets/images/XWhite.png rename to images/XWhite.png diff --git a/package-lock.json b/package-lock.json index be88d98..ef4fe61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,8 @@ "react-dom": "^18.3.1", "react-redux": "^9.1.2", "react-router-dom": "^6.23.1", - "recharts": "^2.12.7" + "recharts": "^2.12.7", + "serve-favicon": "^2.5.0" }, "devDependencies": { "@babel/core": "^7.24.5", @@ -51,6 +52,7 @@ "@types/react": "^18.3.2", "@types/react-dom": "^18.3.0", "@types/redux-mock-store": "^1.0.6", + "@types/serve-favicon": "^2.5.7", "@types/testing-library__react": "^10.2.0", "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.8.0", @@ -6041,6 +6043,15 @@ "@types/node": "*" } }, + "node_modules/@types/serve-favicon": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/@types/serve-favicon/-/serve-favicon-2.5.7.tgz", + "integrity": "sha512-z9TNUQXdQ+W/OJMP1e3KOYUZ99qJS4+ZfFOIrPGImcayqKoyifbJSEFkVq1MCKBbqjMZpjPj3B5ilrQAR2+TOw==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/serve-index": { "version": "1.9.4", "dev": true, @@ -15388,6 +15399,31 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", + "dependencies": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-favicon/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serve-favicon/node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, "node_modules/serve-index": { "version": "1.9.1", "dev": true, diff --git a/package.json b/package.json index 8d89b28..675660f 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,8 @@ "react-dom": "^18.3.1", "react-redux": "^9.1.2", "react-router-dom": "^6.23.1", - "recharts": "^2.12.7" + "recharts": "^2.12.7", + "serve-favicon": "^2.5.0" }, "devDependencies": { "@babel/core": "^7.24.5", @@ -69,6 +70,7 @@ "@types/react": "^18.3.2", "@types/react-dom": "^18.3.0", "@types/redux-mock-store": "^1.0.6", + "@types/serve-favicon": "^2.5.7", "@types/testing-library__react": "^10.2.0", "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.8.0", diff --git a/server/src/server.ts b/server/src/server.ts index 701029a..106259d 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -5,6 +5,7 @@ import 'dotenv/config'; import router from './routers/router.js'; import { fileURLToPath } from 'url'; import { ErrorHandler } from './utils/ErrorHandler.js'; +import favicon from 'serve-favicon'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -15,6 +16,9 @@ const PORT = process.env.NODE_ENV === 'production' ? process.env.PROD_PORT : 808 app.use(cors()); app.use(express.json()); + +app.use(favicon(path.join(__dirname, '../../client/dist/favicon.ico'))); + app.use(express.static(path.join(__dirname, '../../client/dist'))); app.use('/api', router); @@ -28,7 +32,7 @@ app.use('*', (req, res) => { app.use(ErrorHandler); app.listen(PORT, () => { - console.log(`Server Online and listening on PORT ${PORT}`); + console.log(`Server: Listening on PORT ${PORT}`); }); export default app;