more firehose event types

This commit is contained in:
Brandon Thomas committed 2021-05-30 04:12:32 -04:00
1 parent f27908d4a2
commit fd2b01334b
6 files changed
+56 -23

No files matched your search

+23 -15
View File
@@ -59,44 +59,52 @@ pub struct FirehosePublisher {
impl FirehosePublisher {
pub async fn publish_user_sign_up(&self, user_token: &str) -> AnyhowResult<()> {
let token = random_prefix_crockford_token("EV", 32)?;
let event_type = FirehoseEvent::UserSignUp;
let _record_id = self.insert(
event_type,
FirehoseEvent::UserSignUp,
Some(user_token),
Some(user_token)
).await?;
Ok(())
}
pub async fn publish_w2l_template_upload_enqueue(&self, user_token: &str, job_token: &str) -> AnyhowResult<()> {
let token = random_prefix_crockford_token("EV", 32)?;
let event_type = FirehoseEvent::W2lTemplateUploadStarted;
pub async fn enqueue_w2l_template_upload(&self, user_token: &str, job_token: &str) -> AnyhowResult<()> {
let _record_id = self.insert(
event_type,
FirehoseEvent::W2lTemplateUploadStarted,
Some(user_token),
Some(job_token)
).await?;
Ok(())
}
pub async fn enqueue_w2l_inference(&self, maybe_user_token: Option<&str>, job_token: &str) -> AnyhowResult<()> {
let _record_id = self.insert(
FirehoseEvent::W2lInferenceStarted,
maybe_user_token,
Some(job_token)
).await?;
Ok(())
}
pub async fn publish_w2l_template_upload_finished(&self, user_token: &str, template_token: &str) -> AnyhowResult<()> {
let token = random_prefix_crockford_token("EV", 32)?;
let event_type = FirehoseEvent::W2lTemplateUploadCompleted;
let _record_id = self.insert(
event_type,
FirehoseEvent::W2lTemplateUploadCompleted,
Some(user_token),
Some(template_token)
).await?;
Ok(())
}
pub async fn w2l_inference_finished(&self, maybe_user_token: Option<&str>, job_token: &str) -> AnyhowResult<()> {
let _record_id = self.insert(
FirehoseEvent::W2lInferenceCompleted,
maybe_user_token,
Some(job_token)
).await?;
Ok(())
}
// =======================================================================
async fn insert(
&self,
event_type: FirehoseEvent,
@@ -5,7 +5,9 @@ use actix_web::dev::HttpResponseBuilder;
use actix_web::error::ResponseError;
use actix_web::http::StatusCode;
use actix_web::{Responder, web, HttpResponse, error, HttpRequest, HttpMessage};
use chrono::{DateTime, Utc};
use crate::AnyhowResult;
use crate::common_queries::list_w2l_templates::{list_w2l_templates, W2lTemplateRecordForList};
use crate::common_queries::sessions::create_session_for_user;
use crate::http_server::endpoints::users::create_account::CreateAccountError::{BadInput, ServerError, UsernameTaken, EmailTaken};
use crate::http_server::endpoints::users::login::LoginSuccessResponse;
@@ -23,8 +25,6 @@ use sqlx::error::DatabaseError;
use sqlx::error::Error::Database;
use sqlx::mysql::MySqlDatabaseError;
use std::sync::Arc;
use chrono::{DateTime, Utc};
use crate::common_queries::list_w2l_templates::{list_w2l_templates, W2lTemplateRecordForList};
#[derive(Serialize)]
pub struct EventRecord {
@@ -341,6 +341,14 @@ SET
// .map_err(|err| HttpResponse::InternalServerError()
// .body(format!("Redis Err: {:?}", err)))?;
server_state.firehose_publisher.enqueue_w2l_inference(maybe_user_token.as_deref(), &job_token)
.await
.map_err(|e| {
warn!("error publishing event: {:?}", e);
InferW2lWithUploadError::ServerError
})?;
let response = InferW2lWithUploadSuccessResponse {
success: true,
job_token: job_token.to_string(),
@@ -200,14 +200,13 @@ SET
info!("new w2l template upload job id: {}", record_id);
server_state.firehose_publisher.publish_w2l_template_upload_enqueue(&user_session.user_token, &job_token)
server_state.firehose_publisher.enqueue_w2l_template_upload(&user_session.user_token, &job_token)
.await
.map_err(|e| {
warn!("error publishing event: {:?}", e);
UploadW2lTemplateError::ServerError
})?;
let response = UploadW2lTemplateSuccessResponse {
success: true,
job_token: job_token.to_string(),
+2 -2
View File
@@ -163,7 +163,7 @@ pub async fn insert_w2l_result<P: AsRef<Path>>(
frame_width: u32,
frame_height: u32,
duration_millis: u64
) -> AnyhowResult<u64>
) -> AnyhowResult<(u64, String)>
{
let inference_result_token = random_prefix_crockford_token("W2L_RES:", 32)?;
@@ -216,7 +216,7 @@ SET
}
};
Ok(record_id)
Ok((record_id, inference_result_token.clone()))
}
pub struct W2lTemplateRecord2 {
+20 -2
View File
@@ -8,6 +8,7 @@
#[macro_use] extern crate serde_derive;
pub mod buckets;
pub mod common_queries;
pub mod job_queries;
pub mod script_execution;
pub mod util;
@@ -18,6 +19,7 @@ use crate::buckets::bucket_client::BucketClient;
use crate::buckets::bucket_path_unifier::BucketPathUnifier;
use crate::buckets::bucket_paths::hash_to_bucket_path;
use crate::buckets::file_hashing::get_file_hash;
use crate::common_queries::firehose_publisher::FirehosePublisher;
use crate::job_queries::w2l_inference_job_queries::W2lInferenceJobRecord;
use crate::job_queries::w2l_inference_job_queries::get_w2l_template_by_token;
use crate::job_queries::w2l_inference_job_queries::insert_w2l_result;
@@ -43,9 +45,9 @@ use std::fs::{File, metadata};
use std::io::{BufReader, Read};
use std::path::{PathBuf, Path};
use std::process::Command;
use std::thread;
use std::time::Duration;
use tempdir::TempDir;
use std::thread;
// Buckets (shared config)
const ENV_ACCESS_KEY : &'static str = "ACCESS_KEY";
@@ -77,6 +79,8 @@ struct Inferencer {
pub private_bucket_client: BucketClient,
pub public_bucket_client: BucketClient,
pub firehose_publisher: FirehosePublisher,
pub bucket_path_unifier: BucketPathUnifier,
pub semi_persistent_cache: SemiPersistentCacheDir,
@@ -190,6 +194,10 @@ async fn main() -> AnyhowResult<()> {
let w2l_end_bump_filename = easyenv::get_env_string_or_default(
"W2L_END_BUMP_FILENAME", "vocodes-short-end-bump.mp4");
let firehose_publisher = FirehosePublisher {
mysql_pool: mysql_pool.clone(), // NB: MySqlPool is clone/send/sync safe
};
let inferencer = Inferencer {
download_temp_directory: temp_directory,
mysql_pool,
@@ -203,6 +211,7 @@ async fn main() -> AnyhowResult<()> {
w2l_inference: w2l_inference_command,
bucket_path_unifier: BucketPathUnifier::default_paths(),
semi_persistent_cache,
firehose_publisher,
w2l_model_filename,
w2l_end_bump_filename,
};
@@ -510,7 +519,7 @@ async fn process_job(inferencer: &Inferencer, job: &W2lInferenceJobRecord) -> An
// ==================== SAVE RECORDS ==================== //
info!("Saving w2l inference record...");
let id = insert_w2l_result(
let (id, inference_result_token) = insert_w2l_result(
&inferencer.mysql_pool,
job,
&result_object_path,
@@ -524,6 +533,15 @@ async fn process_job(inferencer: &Inferencer, job: &W2lInferenceJobRecord) -> An
info!("Marking job complete...");
mark_w2l_inference_job_done(&inferencer.mysql_pool, job, true).await?;
inferencer.firehose_publisher.w2l_inference_finished(
job.maybe_creator_user_token.as_deref(),
&inference_result_token)
.await
.map_err(|e| {
warn!("error publishing event: {:?}", e);
anyhow!("error publishing event")
})?;
info!("Job {} complete success! Downloaded, ran inference, and uploaded. Saved model record: {}",
job.id, id);