Prepare for the list of ASNs to be mutable
This commit is contained in:
parent
d63d7a4528
commit
3b9bfe1084
|
@ -20,6 +20,7 @@ mod webservice;
|
||||||
|
|
||||||
use asns::*;
|
use asns::*;
|
||||||
use clap::{Arg, App};
|
use clap::{Arg, App};
|
||||||
|
use std::sync::{Arc, RwLock};
|
||||||
use webservice::*;
|
use webservice::*;
|
||||||
|
|
||||||
fn logger_init() {
|
fn logger_init() {
|
||||||
|
@ -65,6 +66,7 @@ fn main() {
|
||||||
Ok(asns) => asns,
|
Ok(asns) => asns,
|
||||||
Err(err) => panic!(format!("{} [{}]", err, db_url)),
|
Err(err) => panic!(format!("{} [{}]", err, db_url)),
|
||||||
};
|
};
|
||||||
|
let asns_arc = RwLock::new(Arc::new(asns));
|
||||||
info!("Starting the webservice");
|
info!("Starting the webservice");
|
||||||
WebService::start(asns, listen_addr);
|
WebService::start(asns_arc, listen_addr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,12 +9,12 @@ use router::Router;
|
||||||
use serde_json;
|
use serde_json;
|
||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
const TTL: u32 = 86400;
|
const TTL: u32 = 86400;
|
||||||
|
|
||||||
struct ASNsMiddleware {
|
struct ASNsMiddleware {
|
||||||
asns: Arc<ASNs>,
|
asns_arc: RwLock<Arc<ASNs>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl typemap::Key for ASNsMiddleware {
|
impl typemap::Key for ASNsMiddleware {
|
||||||
|
@ -22,14 +22,14 @@ impl typemap::Key for ASNsMiddleware {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ASNsMiddleware {
|
impl ASNsMiddleware {
|
||||||
fn new(asns: ASNs) -> ASNsMiddleware {
|
fn new(asns_arc: RwLock<Arc<ASNs>>) -> ASNsMiddleware {
|
||||||
ASNsMiddleware { asns: Arc::new(asns) }
|
ASNsMiddleware { asns_arc: asns_arc }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BeforeMiddleware for ASNsMiddleware {
|
impl BeforeMiddleware for ASNsMiddleware {
|
||||||
fn before(&self, req: &mut Request) -> IronResult<()> {
|
fn before(&self, req: &mut Request) -> IronResult<()> {
|
||||||
req.extensions.insert::<ASNsMiddleware>(self.asns.clone());
|
req.extensions.insert::<ASNsMiddleware>(self.asns_arc.read().unwrap().clone());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,11 +101,11 @@ impl WebService {
|
||||||
Ok(Response::with((status::Ok, mime_json, cache_header, json)))
|
Ok(Response::with((status::Ok, mime_json, cache_header, json)))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn start(asns: ASNs, listen_addr: &str) {
|
pub fn start(asns_arc: RwLock<Arc<ASNs>>, listen_addr: &str) {
|
||||||
let router = router!(index: get "/" => Self::index,
|
let router = router!(index: get "/" => Self::index,
|
||||||
ip_lookup: get "/v1/as/ip/:ip" => Self::ip_lookup);
|
ip_lookup: get "/v1/as/ip/:ip" => Self::ip_lookup);
|
||||||
let mut chain = Chain::new(router);
|
let mut chain = Chain::new(router);
|
||||||
let asns_middleware = ASNsMiddleware::new(asns);
|
let asns_middleware = ASNsMiddleware::new(asns_arc);
|
||||||
chain.link_before(asns_middleware);
|
chain.link_before(asns_middleware);
|
||||||
warn!("webservice ready");
|
warn!("webservice ready");
|
||||||
Iron::new(chain).http(listen_addr).unwrap();
|
Iron::new(chain).http(listen_addr).unwrap();
|
||||||
|
|
Loading…
Reference in New Issue