archive server
This commit is contained in:
@ -1,13 +1,10 @@
|
||||
use crate::minecraft::client::client::Client;
|
||||
use crate::{dockermgr::start_server, minecraft::client::client::Client};
|
||||
|
||||
use diesel::result::Error::NotFound;
|
||||
use json::object;
|
||||
use crate::minecraft::varint::varint_write;
|
||||
use std::collections::VecDeque;
|
||||
|
||||
use crate::{ dockermgr };
|
||||
|
||||
|
||||
|
||||
impl Client {
|
||||
pub async fn login_intent_handle(&mut self, mut _packet: &mut VecDeque<u8>, _packet_id: i32) -> Result<(),String> {
|
||||
@ -30,7 +27,8 @@ impl Client {
|
||||
Err(e) => { return Err(format!("db fetch error : {}", e)); }
|
||||
};
|
||||
|
||||
dockermgr::start_server(&self.docker, &self.db_pool, &server.name).await?;
|
||||
start_server(&self.docker, &self.db_pool, &server.name).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
use bollard::Docker;
|
||||
use chrono::{TimeDelta, Utc};
|
||||
|
||||
use crate::{ DbPool, dockermgr, models::{self, Servers}, schema, status::ServerStatus };
|
||||
use crate::{ DbPool, cli::archive::archive_server, dockermgr, models::{self, Servers}, schema, status::ServerStatus };
|
||||
|
||||
use async_std::task;
|
||||
|
||||
@ -45,6 +45,7 @@ pub async fn server_manager_loop(pool: DbPool, docker: Docker)
|
||||
for srv in a_servers {
|
||||
let time_diff = Utc::now().naive_utc() - srv.last_login.unwrap();
|
||||
should_stop(&docker, &pool, &time_diff, &srv).await;
|
||||
should_archive(&docker, &pool, &time_diff, &srv).await;
|
||||
check_still_online(&docker, &pool, &srv).await;
|
||||
}
|
||||
task::sleep(Duration::from_secs(30)).await;
|
||||
@ -61,6 +62,16 @@ async fn should_stop(docker: &Docker, pool: &DbPool, diff: &TimeDelta, srv: &Ser
|
||||
}
|
||||
}
|
||||
|
||||
async fn should_archive(_docker: &Docker, pool: &DbPool, diff: &TimeDelta, srv: &Servers) {
|
||||
if srv.status != ServerStatus::Stopped { return ; }
|
||||
|
||||
if diff.num_days() >= 30 {
|
||||
println!("last login time exceedd, archiving {}", srv.name);
|
||||
let _ = archive_server(srv, pool);
|
||||
println!("{} archived", srv.name);
|
||||
}
|
||||
}
|
||||
|
||||
async fn check_still_online(docker: &Docker, pool: &DbPool, srv: &Servers) {
|
||||
use schema::servers::dsl::*;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user