draw-game/src/main.rs

92 lines
1.9 KiB
Rust

#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use]
extern crate rocket;
#[macro_use]
extern crate rocket_contrib;
#[macro_use]
extern crate anyhow;
extern crate chrono;
pub mod models;
pub mod schema;
use chrono::prelude::*;
use rocket::{http::RawStr, State};
use std::{
collections::BTreeMap,
fmt::Display,
sync::{Arc, Mutex},
time::{Duration, SystemTime},
};
#[macro_use]
extern crate diesel;
extern crate dotenv;
use diesel::prelude::*;
use dotenv::dotenv;
use self::models::*;
#[database("sqlite_events")]
struct DbConn(diesel::SqliteConnection);
/*
#[get("/")]
fn index() -> Result<String, anyhow::Error> {
Ok(format!(
"Devices:\n{}\n\nwhile true; do curl https://pc.vvn.space/log/name; sleep 5; done",
"aa"
))
}
*/
#[get("/log/<device_name>/<value>")]
fn log_new(device_name: &RawStr, value: &RawStr, conn: DbConn) -> Result<String, anyhow::Error> {
let new_event = NewEvent {
devicename: device_name,
value: value.parse()?,
timestamp: &Local::now().to_rfc3339(),
};
diesel::insert_into(self::schema::events::table)
.values(&new_event)
.execute(&*conn)?;
Ok(String::from("Logged"))
}
#[get("/log/<device_name>")]
fn log_get(device_name: &RawStr, conn: DbConn) -> Result<String, anyhow::Error> {
use self::schema::events::dsl::*;
let results = events
.filter(devicename.eq(device_name.as_str()))
.load::<Event>(&*conn)?;
// convert each result into debug-print lines
let lines = results
.into_iter()
.map(|e| format!("{:?}", e))
.collect::<Vec<_>>()
.join("\n");
Ok(lines)
}
fn main() {
rocket::ignite()
.attach(DbConn::fairing())
.mount(
"/",
rocket_contrib::serve::StaticFiles::from("frontend/build"),
)
.mount("/", routes![log_new, log_get])
.launch();
println!("after");
}