Add choice of proxied search backends
This commit is contained in:
@@ -7,16 +7,16 @@ pub async fn search_channel_databuffer(
|
|||||||
query: ChannelSearchQuery,
|
query: ChannelSearchQuery,
|
||||||
node_config: &NodeConfigCached,
|
node_config: &NodeConfigCached,
|
||||||
) -> Result<ChannelSearchResult, Error> {
|
) -> Result<ChannelSearchResult, Error> {
|
||||||
let do_search = if !query.name_regex.is_empty() {
|
let empty = if !query.name_regex.is_empty() {
|
||||||
true
|
|
||||||
} else if !query.source_regex.is_empty() {
|
|
||||||
true
|
|
||||||
} else if query.description_regex.is_empty() {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
false
|
||||||
|
} else if !query.source_regex.is_empty() {
|
||||||
|
false
|
||||||
|
} else if !query.description_regex.is_empty() {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
true
|
||||||
};
|
};
|
||||||
if !do_search {
|
if empty {
|
||||||
let ret = ChannelSearchResult { channels: vec![] };
|
let ret = ChannelSearchResult { channels: vec![] };
|
||||||
return Ok(ret);
|
return Ok(ret);
|
||||||
}
|
}
|
||||||
@@ -191,6 +191,7 @@ pub async fn search_channel(
|
|||||||
if let Some(conf) = node_config.node.channel_archiver.as_ref() {
|
if let Some(conf) = node_config.node.channel_archiver.as_ref() {
|
||||||
search_channel_archeng(query, node_config.node.backend.clone(), conf).await
|
search_channel_archeng(query, node_config.node.backend.clone(), conf).await
|
||||||
} else if let Some(_conf) = node_config.node.archiver_appliance.as_ref() {
|
} else if let Some(_conf) = node_config.node.archiver_appliance.as_ref() {
|
||||||
|
// TODO
|
||||||
err::todoval()
|
err::todoval()
|
||||||
} else {
|
} else {
|
||||||
search_channel_databuffer(query, node_config).await
|
search_channel_databuffer(query, node_config).await
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use http::{header, Request, Response, StatusCode};
|
|||||||
use hyper::Body;
|
use hyper::Body;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use netpod::log::*;
|
use netpod::log::*;
|
||||||
|
use netpod::ACCEPT_ALL;
|
||||||
use netpod::{ChannelSearchQuery, ChannelSearchResult, ProxyConfig, APP_JSON};
|
use netpod::{ChannelSearchQuery, ChannelSearchResult, ProxyConfig, APP_JSON};
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
@@ -15,12 +16,12 @@ pub async fn channel_search(req: Request<Body>, proxy_config: &ProxyConfig) -> R
|
|||||||
let (head, _body) = req.into_parts();
|
let (head, _body) = req.into_parts();
|
||||||
let vdef = header::HeaderValue::from_static(APP_JSON);
|
let vdef = header::HeaderValue::from_static(APP_JSON);
|
||||||
let v = head.headers.get(header::ACCEPT).unwrap_or(&vdef);
|
let v = head.headers.get(header::ACCEPT).unwrap_or(&vdef);
|
||||||
if v == APP_JSON || v == "*/*" {
|
if v == APP_JSON || v == ACCEPT_ALL {
|
||||||
let inpurl = Url::parse(&format!("dummy:{}", head.uri))?;
|
let inpurl = Url::parse(&format!("dummy:{}", head.uri))?;
|
||||||
let query = ChannelSearchQuery::from_url(&inpurl)?;
|
let query = ChannelSearchQuery::from_url(&inpurl)?;
|
||||||
let mut bodies = vec![];
|
let mut bodies = vec![];
|
||||||
let urls = proxy_config
|
let urls = proxy_config
|
||||||
.backends
|
.backends_search
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|k| {
|
.filter(|k| {
|
||||||
if let Some(back) = &query.backend {
|
if let Some(back) = &query.backend {
|
||||||
|
|||||||
@@ -1351,6 +1351,7 @@ pub struct ProxyConfig {
|
|||||||
pub search_hosts: Vec<String>,
|
pub search_hosts: Vec<String>,
|
||||||
pub backends: Vec<ProxyBackend>,
|
pub backends: Vec<ProxyBackend>,
|
||||||
pub backends2: Vec<ProxyBackend>,
|
pub backends2: Vec<ProxyBackend>,
|
||||||
|
pub backends_search: Vec<ProxyBackend>,
|
||||||
pub api_0_search_hosts: Option<Vec<String>>,
|
pub api_0_search_hosts: Option<Vec<String>>,
|
||||||
pub api_0_search_backends: Option<Vec<String>>,
|
pub api_0_search_backends: Option<Vec<String>>,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user