Skip to content

Commit

Permalink
Merge pull request #2395 from airqo-platform/migrate-netmanager
Browse files Browse the repository at this point in the history
[Netmanager] Fixed typescript errors and added Dockerfile
  • Loading branch information
Baalmart authored Jan 23, 2025
2 parents 0c0be42 + edaa282 commit d866e9a
Show file tree
Hide file tree
Showing 18 changed files with 836 additions and 322 deletions.
9 changes: 9 additions & 0 deletions netmanager-app/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.git
.gitignore
node_modules
.next
.env*
npm-debug.log*
README.md
.vscode
coverage
31 changes: 31 additions & 0 deletions netmanager-app/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Use the official Node.js image as a base
FROM node:18-alpine AS builder

# Set the working directory
WORKDIR /app

COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./

# Copy package.json and package-lock.json
COPY package*.json ./

RUN npm ci

# Copy the rest of the application code
COPY . .

RUN npm run build

# Add healthcheck
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1

USER node

# Expose the application port
EXPOSE 3000

# Command to run the application
CMD ["npm", "run", "start"]
61 changes: 61 additions & 0 deletions netmanager-app/app/types/devices.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { Site } from "./sites";

export interface DeviceSite {
_id: string;
visibility: boolean;
Expand Down Expand Up @@ -60,3 +62,62 @@ export interface DevicesSummaryResponse {
message: string;
devices: Device[];
}

interface HealthTip {
title: string;
description: string;
image: string;
}

interface AQIRange {
min: number;
max?: number;
}

interface AQIRanges {
good: AQIRange;
moderate: AQIRange;
u4sg: AQIRange;
unhealthy: AQIRange;
very_unhealthy: AQIRange;
hazardous: AQIRange;
}

interface Averages {
dailyAverage: number;
percentageDifference: number;
weeklyAverages: {
currentWeek: number;
previousWeek: number;
};
}

export interface Measurement {
_id: string;
site_id: string;
time: string;
__v: number;
aqi_category: string;
aqi_color: string;
aqi_color_name: string;
aqi_ranges: AQIRanges;
averages: Averages;
createdAt: string;
device: string;
device_id: string;
frequency: string;
health_tips: HealthTip[];
is_reading_primary: boolean;
no2: Record<string, unknown>;
pm10: { value: number };
pm2_5: { value: number };
siteDetails: Site;
timeDifferenceHours: number;
updatedAt: string;
}

export interface ReadingsApiResponse {
success: boolean;
message: string;
measurements: Measurement[];
}
72 changes: 17 additions & 55 deletions netmanager-app/app/types/grids.ts
Original file line number Diff line number Diff line change
@@ -1,61 +1,23 @@
export interface Grid {
_id: string;
visibility: boolean;
name: string;
admin_level: string;
network: string;
long_name: string;
createdAt: string;
sites: Site[];
import { Site } from "./sites";

export interface CreateGrid {
name: string;
admin_level: string;
shape: {
type: "MultiPolygon" | "Polygon";
coordinates: number[][][][];
};
network: string;
}

export interface Site {
export interface Grid {
_id: string;
isOnline: boolean;
formatted_name: string;
location_name: string;
search_name: string;
city: string;
district: string;
county: string;
region: string;
country: string;
latitude: number;
longitude: number;
visibility: boolean;
name: string;
approximate_latitude: number;
approximate_longitude: number;
generated_name: string;
data_provider: string;
description: string;
site_category: SiteCategory;
groups: string[];
grids: Grid[];
devices: Device[];
airqlouds: unknown[];
admin_level: string;
network: string;
long_name: string;
createdAt: string;
updatedAt?: string;
pm2_5?: number;
}

interface SiteCategory {
tags: string[];
area_name: string;
category: string;
highway: string;
landuse: string;
latitude: number;
longitude: number;
natural: string;
search_radius: number;
waterway: string;
sites: Site[];
numberOfSites: number;
}

export interface Device {
_id: string;
group: string;
authRequired: boolean;
serial_number: string;
api_code: string;
groups: string[];
}
98 changes: 88 additions & 10 deletions netmanager-app/app/types/sites.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,98 @@
export interface Site {
id: string;
name: string;
description: string;
country: string;
_id: string;
nearest_tahmo_station: {
id: number;
code: string | null;
longitude: number;
latitude: number;
timezone: string | null;
};
images: unknown[];
groups: unknown[];
site_codes: string[];
site_tags: string[];
isOnline: boolean;
formatted_name: string;
location_name: string;
search_name: string;
parish: string;
village: string;
sub_county: string;
city: string;
district: string;
county: string;
region: string;
country: string;
latitude: number;
longitude: number;
name: string;
network: string;
parish: string;
subCounty: string;
approximate_latitude: number;
approximate_longitude: number;
bearing_in_radians: number;
approximate_distance_in_km: number;
lat_long: string;
generated_name: string;
altitude: number;
greenness?: string;
nearestRoad?: number;
mobileAppName?: string;
mobileAppDescription?: string;
data_provider: string;
description: string;
weather_stations: Array<{
code: string;
name: string;
country: string;
longitude: number;
latitude: number;
timezone: string;
distance: number;
_id: string;
}>;
createdAt: string;
lastActive: string;
grids: Array<{
_id: string;
name: string;
admin_level: string;
visibility: boolean;
}>;
devices: Array<{
_id: string;
visibility: boolean;
mobility: boolean;
status: string;
isPrimaryInLocation: boolean;
category: string;
isActive: boolean;
device_number: number;
name: string;
createdAt: string;
device_codes: string[];
network: string;
approximate_distance_in_km: number;
bearing_in_radians: number;
latitude: number;
longitude: number;
ISP: string;
previous_sites: string[];
groups: string[];
host_id: string | null;
cohorts: unknown[];
serial_number: string;
isOnline: boolean;
lastActive: string;
}>;
airqlouds: unknown[];
site_category?: {
tags: string[];
area_name: string;
category: string;
highway: string;
landuse: string;
latitude: number;
longitude: number;
natural: string;
search_radius: number;
waterway: string;
};
}

export interface Device {
Expand Down
Loading

0 comments on commit d866e9a

Please sign in to comment.