spb/datacenterindex
Public
HTML 53.9%
TypeScript 44.5%
JavaScript 0.6%
SQL 0.5%
1import type { CloudRegionDetail as CloudRegionDetailContract, CloudRegionSummary, FacilitySummary } from "@dci/core";2import { pg, andAll, cloudRegionCols, facilityJoins, facilitySummaryCols, mwExpr, type Fragment } from "../lib/sql.js";3import { record, reqIso, str, type Row } from "../lib/rows.js";4import { cloudRegionSummary, facilitySummary } from "../lib/dto.js";5import { findBySlugOrId } from "../lib/resolve.js";6import { eventsForEntity } from "./events.js";7import { provenanceFor } from "./facilities.js";89export async function listCloudRegions(f: { provider?: string; country?: string; metroId?: string; status?: string }): Promise<CloudRegionSummary[]> {10 const sql = pg();11 const c: Fragment[] = [sql`true`];12 if (f.provider) c.push(sql`(pr.slug = ${f.provider} or pr.id = ${f.provider})`);13 if (f.country) c.push(sql`r.country_iso2 = ${f.country.toUpperCase()}`);14 if (f.metroId) c.push(sql`r.metro_id = ${f.metroId}`);15 if (f.status) c.push(sql`r.status = ${f.status}`);16 const rows = await sql<Row[]>`select ${cloudRegionCols(sql)} from cloud_regions r join operators pr on pr.id = r.provider_id where ${andAll(sql, c)} order by pr.name, r.country_iso2, r.code limit 2000`;17 return rows.map(cloudRegionSummary);18}1920/** Contract CloudRegionDetail + the extra fields the web already reads. */21export interface CloudRegionDetail extends CloudRegionDetailContract {22 regionName: string | null;23 countryName: string | null;24 facilitiesInMetro: FacilitySummary[];25 updatedAt: string;26}2728export const MARKET_ASSOCIATION_NOTE = "Region associated with market, not hosted at a specific facility";2930export async function getCloudRegion(idOrSlug: string): Promise<CloudRegionDetail | null> {31 const sql = pg();32 const row = await findBySlugOrId("cloud_regions", idOrSlug);33 if (!row) return null;34 const id = String(row.id);35 const metroId = str(row.metro_id);36 const providerId = String(row.provider_id);37 const [main, siblings, facs, hosts, metroRows, countryRows, events, provenance] = await Promise.all([38 sql<Row[]>`select ${cloudRegionCols(sql)} from cloud_regions r join operators pr on pr.id = r.provider_id where r.id = ${id}`,39 sql<Row[]>`select ${cloudRegionCols(sql)} from cloud_regions r join operators pr on pr.id = r.provider_id where r.provider_id = ${providerId} and r.id <> ${id} and r.country_iso2 is not distinct from ${str(row.country_iso2)} order by r.code limit 12`,40 metroId41 ? sql<Row[]>`select ${facilitySummaryCols(sql)} from facilities f ${facilityJoins(sql)} where f.merged_into is null and f.metro_id = ${metroId} order by ${mwExpr(sql)} desc nulls last, f.name limit 12`42 : Promise.resolve([] as Row[]),43 // explicit hosting link only: a cloud tenancy of this provider at a facility in the region's metro / country44 sql<Row[]>`select ${facilitySummaryCols(sql)} from facilities f ${facilityJoins(sql)} join facility_tenants t on t.facility_id = f.id and t.role = 'cloud' and t.operator_id = ${providerId}45 where f.merged_into is null and ${metroId ? sql`f.metro_id = ${metroId}` : row.country_iso2 ? sql`f.country_iso2 = ${String(row.country_iso2)}` : sql`false`} order by f.name limit 50`,46 metroId ? sql<Row[]>`select id, slug, name from metros where id = ${metroId}` : Promise.resolve([] as Row[]),47 row.country_iso2 ? sql<Row[]>`select name from countries where iso2 = ${String(row.country_iso2)}` : Promise.resolve([] as Row[]),48 eventsForEntity("cloud_region", id, 50),49 provenanceFor("cloud_region", id),50 ]);51 const base = cloudRegionSummary(main[0] ?? row);52 const hostFacilities = hosts.map(facilitySummary);53 const marketFacilities = facs.map(facilitySummary);54 const announcedProv = provenance.find((p) => p.field === "announcedOn" && typeof p.value === "string");55 const announcedOn = announcedProv ? String(announcedProv.value) : base.status === "announced" && base.launchedOn ? base.launchedOn : null;56 return {57 ...base,58 metro: metroRows[0] ? { id: String(metroRows[0].id), slug: String(metroRows[0].slug), name: String(metroRows[0].name) } : null,59 hostFacilities,60 marketFacilities,61 siblingRegions: siblings.map(cloudRegionSummary),62 announcedOn,63 events,64 provenance,65 externalIds: record(row.external_ids),66 note: hostFacilities.length ? `Hosting publicly verified for ${hostFacilities.length} facilit${hostFacilities.length > 1 ? "ies" : "y"} (cloud tenancy recorded at the facility); marketFacilities lists the other facilities of the market.` : MARKET_ASSOCIATION_NOTE,67 regionName: str(row.region_name),68 countryName: countryRows[0] ? String(countryRows[0].name) : null,69 facilitiesInMetro: marketFacilities,70 updatedAt: reqIso(row.updated_at),71 };72}73