This commit is contained in:
core 2024-10-24 22:20:30 -04:00
parent 7a4691e3e4
commit d07f3485fc
Signed by: core
GPG Key ID: FDBF740DADDCEECF
12 changed files with 38 additions and 8083 deletions

BIN
10.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

1018
log.txt

File diff suppressed because one or more lines are too long

7022
log2.txt

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,6 @@ use std::time::SystemTime;
use actix_web::{App, HttpServer}; use actix_web::{App, HttpServer};
use actix_web::web::Data; use actix_web::web::Data;
use crate::grib2::{LookupTable2D}; use crate::grib2::{LookupTable2D};
use crate::sources::noaa::mrms_cref;
#[global_allocator] #[global_allocator]
static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
@ -39,7 +38,7 @@ async fn main() -> std::io::Result<()> {
}); });
HttpServer::new(move || { HttpServer::new(move || {
App::new() App::new()
.service(mrms_cref) .service(sources::noaa::noaa_mrms_merged_composite_reflectivity_qc)
.app_data(data.clone()) .app_data(data.clone())
}) })
.bind(("::", 8080))? .bind(("::", 8080))?

View File

@ -166,3 +166,27 @@ pub fn render(xtile: f64, ytile: f64, z: i32, tilesize: usize, pal: Palette, map
buf buf
} }
#[macro_export]
macro_rules! grib2_handler {
(mount $f:ident, at: $path:expr, from: $from:expr, needs_gzip: $needs_gzip:expr, valid_for: $valid_for:expr, lut_with: $lut_key:expr, palette: $pal:expr) => {
#[::actix_web::get($path)]
async fn $f(path: ::actix_web::web::Path<(i32,u32,u32)>, data: ::actix_web::web::Data<crate::AppState>) -> ::actix_web::HttpResponse {
crate::sources::grib2::reload_if_required(
$from,
$needs_gzip,
$valid_for,
$lut_key,
&data.lut_cache_timestamps,
&data.lut_cache
).await;
if let Some(map) = data.lut_cache.read().await.get(&$lut_key) {
::actix_web::HttpResponse::Ok()
.insert_header(::actix_web::http::header::ContentType(::mime::IMAGE_PNG))
.body(crate::sources::grib2::render(path.1 as f64, path.2 as f64, path.0, 256, $pal, map))
} else {
::actix_web::HttpResponse::new(::actix_web::http::StatusCode::NOT_FOUND)
}
}
};
}

View File

@ -1,2 +1,3 @@
pub mod noaa; pub mod noaa;
mod grib2; #[macro_use]
pub mod grib2;

View File

@ -1,40 +1,12 @@
use std::collections::BTreeMap; use wxbox_pal::create_test_palette;
use std::f64::consts::PI; use crate::{grib2_handler, LutKey};
use std::io::{BufWriter, Cursor, Read};
use std::time::{SystemTime};
use actix_web::{get, HttpResponse, web};
use actix_web::http::{header, StatusCode};
use actix_web::web::Data;
use eccodes::{CodesHandle, FallibleStreamingIterator, ProductKind};
use flate2::read::GzDecoder;
use ndarray::{Zip};
use ordered_float::{FloatCore, OrderedFloat};
use png::{BitDepth, ColorType, Encoder};
use wxbox_pal::{Color, ColorPalette, create_test_palette};
use crate::{AppState, LutKey};
use crate::grib2::{closest_key, LookupTable2D};
use crate::pixmap::Pixmap;
use crate::sources::grib2::{eccodes_remap, load, needs_reload, reload_if_required, render};
#[get("/noaa_mrms_merged_composite_reflectivity_qc/{z}/{x}/{y}.png")] grib2_handler! {
async fn mrms_cref(path: web::Path<(i32, u32, u32)>, data: Data<AppState>) -> HttpResponse { mount noaa_mrms_merged_composite_reflectivity_qc,
let pal = create_test_palette(); at: "/noaa_mrms_merged_composite_reflectivity_qc/{z}/{x}/{y}.png",
from: "https://mrms.ncep.noaa.gov/data/2D/MergedReflectivityQCComposite/MRMS_MergedReflectivityQCComposite.latest.grib2.gz",
reload_if_required( needs_gzip: true,
"https://mrms.ncep.noaa.gov/data/2D/MergedReflectivityQCComposite/MRMS_MergedReflectivityQCComposite.latest.grib2.gz", valid_for: 120,
true, lut_with: LutKey::NoaaMrmsMergedCompositeReflectivityQc,
120, palette: create_test_palette()
LutKey::NoaaMrmsMergedCompositeReflectivityQc,
&data.lut_cache_timestamps,
&data.lut_cache
).await;
if let Some(map) = data.lut_cache.read().await.get(&LutKey::NoaaMrmsMergedCompositeReflectivityQc) {
HttpResponse::Ok()
.insert_header(header::ContentType(mime::IMAGE_PNG))
.body(render(path.1 as f64, path.2 as f64, path.0, 256, pal, map))
} else {
HttpResponse::new(StatusCode::NOT_FOUND)
} }
}

View File

@ -4,7 +4,6 @@
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite dev", "dev": "vite dev",
"host": "vite dev --host",
"build": "vite build", "build": "vite build",
"preview": "vite preview", "preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",