Can request consumption history
This commit is contained in:
		@@ -97,6 +97,30 @@ impl ConsumptionHistoryFile {
 | 
				
			|||||||
        )?;
 | 
					        )?;
 | 
				
			||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get the total runtime of a relay during a given time window
 | 
				
			||||||
 | 
					    pub fn get_history(
 | 
				
			||||||
 | 
					        r#type: ConsumptionHistoryType,
 | 
				
			||||||
 | 
					        from: u64,
 | 
				
			||||||
 | 
					        to: u64,
 | 
				
			||||||
 | 
					        interval: u64,
 | 
				
			||||||
 | 
					    ) -> anyhow::Result<Vec<EnergyConsumption>> {
 | 
				
			||||||
 | 
					        let mut res = Vec::with_capacity(((to - from) / interval) as usize);
 | 
				
			||||||
 | 
					        let mut file = Self::open(from, r#type)?;
 | 
				
			||||||
 | 
					        let mut curr_time = from;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while curr_time < to {
 | 
				
			||||||
 | 
					            if !file.contains_time(curr_time) {
 | 
				
			||||||
 | 
					                file = Self::open(curr_time, r#type)?;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            res.push(file.get_consumption(curr_time)?);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            curr_time += interval;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Ok(res)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -131,10 +131,18 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
 | 
				
			|||||||
                "/web_api/energy/curr_consumption",
 | 
					                "/web_api/energy/curr_consumption",
 | 
				
			||||||
                web::get().to(energy_controller::curr_consumption),
 | 
					                web::get().to(energy_controller::curr_consumption),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					            .route(
 | 
				
			||||||
 | 
					                "/web_api/energy/curr_consumption/history",
 | 
				
			||||||
 | 
					                web::get().to(energy_controller::curr_consumption_history),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            .route(
 | 
					            .route(
 | 
				
			||||||
                "/web_api/energy/cached_consumption",
 | 
					                "/web_api/energy/cached_consumption",
 | 
				
			||||||
                web::get().to(energy_controller::cached_consumption),
 | 
					                web::get().to(energy_controller::cached_consumption),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					            .route(
 | 
				
			||||||
 | 
					                "/web_api/energy/relays_consumption/history",
 | 
				
			||||||
 | 
					                web::get().to(energy_controller::relays_consumption_history),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            // Devices controller
 | 
					            // Devices controller
 | 
				
			||||||
            .route(
 | 
					            .route(
 | 
				
			||||||
                "/web_api/devices/list_pending",
 | 
					                "/web_api/devices/list_pending",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,9 @@
 | 
				
			|||||||
 | 
					use crate::app_config::ConsumptionHistoryType;
 | 
				
			||||||
 | 
					use crate::energy::consumption_history_file::ConsumptionHistoryFile;
 | 
				
			||||||
use crate::energy::{consumption, energy_actor};
 | 
					use crate::energy::{consumption, energy_actor};
 | 
				
			||||||
use crate::server::custom_error::HttpResult;
 | 
					use crate::server::custom_error::HttpResult;
 | 
				
			||||||
use crate::server::WebEnergyActor;
 | 
					use crate::server::WebEnergyActor;
 | 
				
			||||||
 | 
					use crate::utils::time_utils::time_secs;
 | 
				
			||||||
use actix_web::HttpResponse;
 | 
					use actix_web::HttpResponse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(serde::Serialize)]
 | 
					#[derive(serde::Serialize)]
 | 
				
			||||||
@@ -15,9 +18,30 @@ pub async fn curr_consumption() -> HttpResult {
 | 
				
			|||||||
    Ok(HttpResponse::Ok().json(Consumption { consumption }))
 | 
					    Ok(HttpResponse::Ok().json(Consumption { consumption }))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Get curr consumption history
 | 
				
			||||||
 | 
					pub async fn curr_consumption_history() -> HttpResult {
 | 
				
			||||||
 | 
					    let history = ConsumptionHistoryFile::get_history(
 | 
				
			||||||
 | 
					        ConsumptionHistoryType::GridConsumption,
 | 
				
			||||||
 | 
					        time_secs() - 3600 * 24,
 | 
				
			||||||
 | 
					        time_secs(),
 | 
				
			||||||
 | 
					        60 * 10,
 | 
				
			||||||
 | 
					    )?;
 | 
				
			||||||
 | 
					    Ok(HttpResponse::Ok().json(history))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Get cached energy consumption
 | 
					/// Get cached energy consumption
 | 
				
			||||||
pub async fn cached_consumption(energy_actor: WebEnergyActor) -> HttpResult {
 | 
					pub async fn cached_consumption(energy_actor: WebEnergyActor) -> HttpResult {
 | 
				
			||||||
    let consumption = energy_actor.send(energy_actor::GetCurrConsumption).await?;
 | 
					    let consumption = energy_actor.send(energy_actor::GetCurrConsumption).await?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(HttpResponse::Ok().json(Consumption { consumption }))
 | 
					    Ok(HttpResponse::Ok().json(Consumption { consumption }))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub async fn relays_consumption_history() -> HttpResult {
 | 
				
			||||||
 | 
					    let history = ConsumptionHistoryFile::get_history(
 | 
				
			||||||
 | 
					        ConsumptionHistoryType::RelayConsumption,
 | 
				
			||||||
 | 
					        time_secs() - 3600 * 24,
 | 
				
			||||||
 | 
					        time_secs(),
 | 
				
			||||||
 | 
					        60 * 10,
 | 
				
			||||||
 | 
					    )?;
 | 
				
			||||||
 | 
					    Ok(HttpResponse::Ok().json(history))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user