@@ -20,6 +20,7 @@ use crate::analytics;
2020use crate :: banner;
2121use crate :: handlers:: http:: logstream;
2222use crate :: handlers:: http:: middleware:: RouteExt ;
23+ use crate :: handlers:: http:: MAX_EVENT_PAYLOAD_SIZE ;
2324use crate :: localcache:: LocalCacheManager ;
2425use crate :: metadata;
2526use crate :: metrics;
@@ -30,8 +31,6 @@ use crate::storage::ObjectStorageError;
3031use crate :: storage:: PARSEABLE_METADATA_FILE_NAME ;
3132use crate :: sync;
3233
33- use std:: net:: SocketAddr ;
34-
3534use super :: server:: Server ;
3635use super :: ssl_acceptor:: get_ssl_acceptor;
3736use super :: IngesterMetadata ;
@@ -63,8 +62,8 @@ impl ParseableServer for IngestServer {
6362 prometheus : PrometheusMetrics ,
6463 _oidc_client : Option < crate :: oidc:: OpenidConfig > ,
6564 ) -> anyhow:: Result < ( ) > {
66- // set the ingestor metadata
67- self . set_ingestor_metadata ( ) . await ?;
65+ // set the ingester metadata
66+ self . set_ingester_metadata ( ) . await ?;
6867
6968 // get the ssl stuff
7069 let ssl = get_ssl_acceptor (
@@ -99,11 +98,9 @@ impl ParseableServer for IngestServer {
9998
10099 /// implement the init method will just invoke the initialize method
101100 async fn init ( & self ) -> anyhow:: Result < ( ) > {
102- // self.validate()?;
103101 self . initialize ( ) . await
104102 }
105103
106- #[ allow( unused) ]
107104 fn validate ( & self ) -> anyhow:: Result < ( ) > {
108105 if CONFIG . get_storage_mode_string ( ) == "Local drive" {
109106 return Err ( anyhow:: Error :: msg (
@@ -123,8 +120,9 @@ impl IngestServer {
123120 . service (
124121 // Base path "{url}/api/v1"
125122 web:: scope ( & base_path ( ) )
126- . service ( Server :: get_query_factory ( ) )
127- . service ( Server :: get_ingest_factory ( ) ) ,
123+ . service ( Server :: get_query_factory ( ) )
124+ . service ( Server :: get_ingest_factory ( ) )
125+ . service ( Self :: logstream_api ( ) ) ,
128126 )
129127 . service ( Server :: get_liveness_factory ( ) )
130128 . service ( Server :: get_readiness_factory ( ) )
@@ -152,46 +150,82 @@ impl IngestServer {
152150 )
153151 }
154152
155- #[ inline( always) ]
156- fn get_ingestor_address ( & self ) -> SocketAddr {
157- // this might cause an issue down the line
158- // best is to make the Cli Struct better, but thats a chore
159- ( CONFIG . parseable . address . clone ( ) )
160- . parse :: < SocketAddr > ( )
161- . unwrap ( )
153+ fn logstream_api ( ) -> Scope {
154+ web:: scope ( "/logstream" )
155+ . service (
156+ // GET "/logstream" ==> Get list of all Log Streams on the server
157+ web:: resource ( "" )
158+ . route ( web:: get ( ) . to ( logstream:: list) . authorize ( Action :: ListStream ) ) ,
159+ )
160+ . service (
161+ web:: scope ( "/{logstream}" )
162+ . service (
163+ web:: resource ( "" )
164+ // PUT "/logstream/{logstream}" ==> Create log stream
165+ . route (
166+ web:: put ( )
167+ . to ( logstream:: put_stream)
168+ . authorize_for_stream ( Action :: CreateStream ) ,
169+ )
170+ // DELETE "/logstream/{logstream}" ==> Delete log stream
171+ . route (
172+ web:: delete ( )
173+ . to ( logstream:: delete)
174+ . authorize_for_stream ( Action :: DeleteStream ) ,
175+ )
176+ . app_data ( web:: PayloadConfig :: default ( ) . limit ( MAX_EVENT_PAYLOAD_SIZE ) ) ,
177+ )
178+ . service (
179+ // GET "/logstream/{logstream}/schema" ==> Get schema for given log stream
180+ web:: resource ( "/schema" ) . route (
181+ web:: get ( )
182+ . to ( logstream:: schema)
183+ . authorize_for_stream ( Action :: GetSchema ) ,
184+ ) ,
185+ )
186+ . service (
187+ // GET "/logstream/{logstream}/stats" ==> Get stats for given log stream
188+ web:: resource ( "/stats" ) . route (
189+ web:: get ( )
190+ . to ( logstream:: get_stats)
191+ . authorize_for_stream ( Action :: GetStats ) ,
192+ ) ,
193+ ) ,
194+ )
162195 }
163196
164- // create the ingestor metadata and put the .ingestor .json file in the object store
165- async fn set_ingestor_metadata ( & self ) -> anyhow:: Result < ( ) > {
197+ // create the ingester metadata and put the .ingester .json file in the object store
198+ async fn set_ingester_metadata ( & self ) -> anyhow:: Result < ( ) > {
166199 let store = CONFIG . storage ( ) . get_object_store ( ) ;
167200
168201 // remove ip adn go with the domain name
169- let sock = self . get_ingestor_address ( ) ;
202+ let sock = Server :: get_server_address ( ) ;
170203 let path = RelativePathBuf :: from ( format ! (
171- "ingestor .{}.{}.json" ,
204+ "ingester .{}.{}.json" ,
172205 sock. ip( ) , // this might be wrong
173206 sock. port( )
174207 ) ) ;
175208
176209 if store. get_object ( & path) . await . is_ok ( ) {
177- println ! ( "Ingestor metadata already exists" ) ;
210+ println ! ( "Ingester metadata already exists" ) ;
178211 return Ok ( ( ) ) ;
179212 } ;
180213
214+ let scheme = CONFIG . parseable . get_scheme ( ) ;
181215 let resource = IngesterMetadata :: new (
182216 sock. port ( ) . to_string ( ) ,
183217 CONFIG
184218 . parseable
185219 . domain_address
186220 . clone ( )
187221 . unwrap_or_else ( || {
188- Url :: parse ( & format ! ( "http ://{}:{}" , sock. ip( ) , sock. port( ) ) ) . unwrap ( )
222+ Url :: parse ( & format ! ( "{} ://{}:{}" , scheme , sock. ip( ) , sock. port( ) ) ) . unwrap ( )
189223 } )
190224 . to_string ( ) ,
191225 DEFAULT_VERSION . to_string ( ) ,
192226 store. get_bucket_name ( ) ,
193227 & CONFIG . parseable . username ,
194- & CONFIG . parseable . password , // is this secure?
228+ & CONFIG . parseable . password ,
195229 ) ;
196230
197231 let resource = serde_json:: to_string ( & resource)
@@ -205,7 +239,7 @@ impl IngestServer {
205239 }
206240
207241 // check for querier state. Is it there, or was it there in the past
208- // this should happen before the set the ingestor metadata
242+ // this should happen before the set the ingester metadata
209243 async fn check_querier_state ( & self ) -> anyhow:: Result < ( ) , ObjectStorageError > {
210244 // how do we check for querier state?
211245 // based on the work flow of the system, the querier will always need to start first
0 commit comments