init
This commit is contained in:
commit
7235326826
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/target
|
45
.vscode/launch.json
vendored
Normal file
45
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "lldb",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Debug executable 'middleman'",
|
||||||
|
"cargo": {
|
||||||
|
"args": [
|
||||||
|
"build",
|
||||||
|
"--bin=middleman",
|
||||||
|
"--package=middleman"
|
||||||
|
],
|
||||||
|
"filter": {
|
||||||
|
"name": "middleman",
|
||||||
|
"kind": "bin"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": [],
|
||||||
|
"cwd": "${workspaceFolder}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lldb",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Debug unit tests in executable 'middleman'",
|
||||||
|
"cargo": {
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--no-run",
|
||||||
|
"--bin=middleman",
|
||||||
|
"--package=middleman"
|
||||||
|
],
|
||||||
|
"filter": {
|
||||||
|
"name": "middleman",
|
||||||
|
"kind": "bin"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": [],
|
||||||
|
"cwd": "${workspaceFolder}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
3064
Cargo.lock
generated
Normal file
3064
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
12
Cargo.toml
Normal file
12
Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "middleman"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
rocket = {path = "../Rocket/core/lib"}
|
||||||
|
tokio = { version = "1.40.0", features = ["full"] }
|
||||||
|
tracing = "0.1.40"
|
||||||
|
tracing-subscriber = "0.3.18"
|
||||||
|
url = "2.5.2"
|
||||||
|
minio = {git="https://github.com/minio/minio-rs.git", rev = "c28f576"}
|
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Visable Rocket
|
||||||
|
|
||||||
|
Adding visability to rocket.rs
|
||||||
|
|
||||||
|
In the project you need to specifiy the url that Loki is at.
|
||||||
|
|
||||||
|
Then you need to add this project's url to your prometheus config.
|
||||||
|
```toml
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: rocket
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:8000']
|
||||||
|
```
|
4
Rocket.toml
Normal file
4
Rocket.toml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[default]
|
||||||
|
address = "0.0.0.0"
|
||||||
|
port = 4433
|
||||||
|
cli_colors = false
|
52
src/main.rs
Normal file
52
src/main.rs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
use rocket::{fs::FileServer, get, routes, State};
|
||||||
|
use s3::S3;
|
||||||
|
use tracing::{info, Level};
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
|
mod s3;
|
||||||
|
|
||||||
|
struct Config<'a> {
|
||||||
|
s3_url: &'a str,
|
||||||
|
s3_bucket: &'a str,
|
||||||
|
s3_access_key: &'a str,
|
||||||
|
s3_secret_key: &'a str,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rocket::main]
|
||||||
|
async fn main() {
|
||||||
|
tracing_subscriber::fmt()
|
||||||
|
.with_line_number(false)
|
||||||
|
.without_time()
|
||||||
|
.with_max_level(Level::INFO)
|
||||||
|
.init();
|
||||||
|
|
||||||
|
let config = Config {
|
||||||
|
s3_bucket: "v1.10",
|
||||||
|
s3_url: "http://localhost:9000",
|
||||||
|
s3_access_key: "8UO76z8wCs9DnpxSbQUY",
|
||||||
|
s3_secret_key: "xwKVMpf2jzgprsdo85Dvo74UmO84y0aRrAUorYY5",
|
||||||
|
};
|
||||||
|
|
||||||
|
let s3 = S3::connect(&config).await.expect("Failed to connect to minio, aborting.");
|
||||||
|
|
||||||
|
let _ = rocket::build()
|
||||||
|
.mount("/", FileServer::new("www/"))
|
||||||
|
.mount("/", routes![get_s3_content])
|
||||||
|
.manage(s3)
|
||||||
|
.launch()
|
||||||
|
.await;
|
||||||
|
|
||||||
|
info!("Bye");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/<path>")]
|
||||||
|
async fn get_s3_content(path: &str, db: &State<S3>) -> String {
|
||||||
|
info!(path);
|
||||||
|
// TODO this is just pseudo-code
|
||||||
|
let url = "en.wikipedia.org/wiki/CNBC";
|
||||||
|
if let Some(resp) = db.get(&url).await {
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
"Hello world.".to_owned()
|
||||||
|
}
|
||||||
|
|
59
src/s3.rs
Normal file
59
src/s3.rs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
use minio::s3::{
|
||||||
|
args::{BucketExistsArgs, MakeBucketArgs}, client::ClientBuilder, creds::StaticProvider, error::Error, http::BaseUrl, types::S3Api, Client
|
||||||
|
};
|
||||||
|
use tracing::{instrument, trace};
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
|
use crate::Config;
|
||||||
|
|
||||||
|
pub struct S3 {
|
||||||
|
bucket_name: String,
|
||||||
|
client: Client,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl S3 {
|
||||||
|
#[instrument(skip_all, name = "S3")]
|
||||||
|
pub async fn connect(config: &Config<'_>) -> Result<Self, Error> {
|
||||||
|
let base_url = config.s3_url.parse::<BaseUrl>().unwrap();
|
||||||
|
|
||||||
|
let static_provider =
|
||||||
|
StaticProvider::new(&config.s3_access_key, &config.s3_secret_key, None);
|
||||||
|
|
||||||
|
let client = ClientBuilder::new(base_url)
|
||||||
|
.provider(Some(Box::new(static_provider)))
|
||||||
|
.build()?;
|
||||||
|
|
||||||
|
trace!("Checking bucket...");
|
||||||
|
let exists = client
|
||||||
|
.bucket_exists(&BucketExistsArgs::new(&config.s3_bucket).unwrap())
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
if !exists {
|
||||||
|
trace!("Creating bucket...");
|
||||||
|
client
|
||||||
|
.make_bucket(&MakeBucketArgs::new(&config.s3_bucket).unwrap())
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
|
trace!("Connection successfull");
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
bucket_name: config.s3_bucket.to_owned(),
|
||||||
|
client: client,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get(&self, filename: &str) -> Option<String> {
|
||||||
|
let data = self
|
||||||
|
.client
|
||||||
|
.get_object(&self.bucket_name, &filename)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
if let Ok(segments )= data.content.to_segmented_bytes().await {
|
||||||
|
return Some(segments.to_bytes().iter().map(|c| *c as char).collect::<String>())
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
16
www/index.html
Normal file
16
www/index.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<title></title>
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Hello world
|
||||||
|
<script src="main.js" async defer></script>
|
||||||
|
<div id="frame"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
0
www/main.js
Normal file
0
www/main.js
Normal file
4
www/style.css
Normal file
4
www/style.css
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
html {
|
||||||
|
background-color: black;
|
||||||
|
color: white;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user