Files
smartpark-app/latex-manual/devopsProjectProposal.tex
T

231 lines
7.6 KiB
TeX

\chapter{Project Proposal}
\ChapterLabel{ProjectProposal}
\index{project proposal}
\section{Project Title}
\begin{center}
\Large
\textbf{Stevens SmartPark: Campus Parking Information System}
\end{center}
\section{Project Description}
Stevens SmartPark is a proposed web application that will provide students with information about parking availability at major Stevens Institute of Technology
parking locations. The goal of the project is to make it easier for students to quickly see the status of campus parking areas before deciding where to park.
The application will focus on locations such as Babbio Garage, River Lot, 8th Street Lot, Castle Point Hall Lot, and Howe Center Lot.
For each parking location, the system may display information such as:
\begin{itemize}
\item the number of available parking spaces;
\item the total number of parking spaces;
\item whether the parking location is open or closed;
\item opening and closing times;
\item whether overnight parking is allowed;
\item handicapped parking availability;
\item whether electric-vehicle charging is available; and
\item EV charger availability and pricing when applicable.
\end{itemize}
Since real-time parking data may not be available, the project can use simulated parking activity. The simulation would represent vehicles entering and leaving parking areas and would update the number of available spaces.
For example, if a simulated vehicle enters Babbio Garage, the number of available spaces would decrease by one. When a vehicle leaves, the number of
available spaces would increase.
This will allow the group to build and demonstrate a working application without requiring access to actual parking sensors or private Stevens parking
systems.
\section{Main Project Tasks}
The project will be divided into several basic tasks.
\begin{enumerate}
\item Create a web interface that displays the Stevens parking locations.
\item Store information about each parking location.
\item Display the number of available and total parking spaces.
\item Display parking hours and whether a parking location is currently open or closed.
\item Display handicapped and EV parking information.
\item Create a simple simulation for vehicles entering and leaving parking areas.
\item Update parking availability when simulated activity occurs.
\item Test the application to make sure parking counts remain valid.
\item Store the application and its configuration in source control.
\item Package the application using Docker.
\item Deploy the application to a DigitalOcean environment.
\end{enumerate}
\section{Proposed Application Design}
The application will likely contain three main parts: a web interface, an application server, and a database.
A simplified design is shown below.
\begin{minted}[fontsize=\small,breaklines,frame=single]{text}
Student Browser
|
v
Stevens SmartPark Software
|
v
Node.js / Express Application
|
v
PostgreSQL Database
\end{minted}
The web interface will display parking information to the user. The application server will handle parking data and simulated parking activity. The database
will store information about the parking locations.
\section{Proposed DevSecOps Tools}
Because the project is still in the proposal stage, the final tools may change. The following tools are currently being considered.
\begin{tabularx}{\linewidth}{L{3.3cm}L{3.8cm}Y}
\caption{Proposed Stevens SmartPark Tools
\label{Table:SmartParkTools}}\\
\toprule
\textbf{Area} & \textbf{Tool} & \textbf{Purpose}\\
\midrule
Source Control & Git and GitHub &
Store the source code, track changes, and allow the group to collaborate on the
project.\\
Application & Node.js and Express &
Build the server-side portion of the SmartPark web application.\\
Database & PostgreSQL &
Store parking locations, parking rules, capacity, and simulated availability
information.\\
Testing & Jest &
Test application logic such as parking-space calculations and simulated
vehicle activity.\\
Containerization & Docker &
Package the SmartPark application so that it can run in a consistent
environment.\\
Deployment & DigitalOcean &
Host the containerized SmartPark application in a sandbox cloud environment.\\
\bottomrule
\end{tabularx}
These tools were selected because they cover the main parts of the development process without making the initial project unnecessarily complicated.
\section{Source Control}
Git and GitHub will be used for source control. The project repository will contain the application code, Docker configuration, database-related files, and
documentation.
Using source control will allow the group to track changes and work on separate parts of the application without relying on a single copy of the project.
Typical Git commands may include:
\begin{minted}[fontsize=\small,breaklines,frame=single]{bash}
git status
git add .
git commit -m "Update SmartPark application"
git push
\end{minted}
\section{Database}
PostgreSQL is being considered for storing the SmartPark data.
The database may contain information such as:
\begin{itemize}
\item parking location name;
\item total parking capacity;
\item currently available spaces;
\item opening time;
\item closing time;
\item overnight parking rules;
\item handicapped parking spaces; and
\item EV charging information.
\end{itemize}
A parking location could conceptually contain data similar to:
\begin{minted}[fontsize=\small,breaklines,frame=single]{text}
Parking Location: Babbio Garage
Total Spaces: 120
Available Spaces: 42
Open: Yes
Opening Time: 7:00 AM
Closing Time: 11:00 PM
Overnight Parking: No
EV Charging: Available
\end{minted}
\section{Testing}
Testing will be used to make sure that the simulated parking information remains valid.
Possible tests include:
\begin{itemize}
\item a vehicle entering decreases the available-space count by one;
\item a vehicle leaving increases the available-space count by one;
\item the number of available spaces cannot become negative;
\item the number of available spaces cannot become greater than the total
capacity; and
\item the correct parking information is returned for each location.
\end{itemize}
Jest is being considered as the testing tool because it can be used with the proposed Node.js application.
A typical test command would be:
\begin{minted}[fontsize=\small,breaklines,frame=single]{bash}
npm test
\end{minted}
\section{Docker and Deployment}
Docker will be used to package the SmartPark application and its dependencies into a container. This will help make the application easier to run in a
consistent environment.
A simple deployment process may include:
\begin{minted}[fontsize=\small,breaklines,frame=single]{text}
Application Source Code
|
v
Docker Image
|
v
DigitalOcean Droplet
|
v
Stevens SmartPark Software
\end{minted}
DigitalOcean is currently being considered as the deployment environment because it is already being used in the course for Docker deployment activities.
\section{Expected Result}
The proposed result is a simple working Stevens SmartPark software that allows a student to view parking information for several campus locations.
The initial project is expected to demonstrate:
\begin{itemize}
\item a working web application;
\item multiple Stevens parking locations;
\item simulated parking availability;
\item parking hours and rules;
\item handicapped and EV parking information;
\item source-controlled project files;
\item automated tests;
\item stored parking data;
\item a Dockerized application; and
\item deployment to a sandbox environment such as DigitalOcean.
\end{itemize}
The exact design and tools may change as the project develops. At this stage, the purpose of the proposal is to establish the project idea and identify the
main technologies that may be required to build it.