docker-container-log-streamer 0.1.0

A Rust library for streaming docker logs via websocket.
Documentation

#[tokio::test]
async fn test_docker_since(){
    use crate::docker_since;
    assert_eq!(docker_since(0),0);
    assert!(docker_since(30)>0);
}

#[tokio::test]
async fn test_docker_logs(){
    use crate::docker_logs;
    use crate::Logger;
    use futures_util::StreamExt;
    use bollard::{
        Docker,
        container::{
            RemoveContainerOptions,
            CreateContainerOptions, 
            Config,
            LogsOptions, 
            LogOutput
        },
    };
    let mut logger: Logger = Logger::new(&"test-docker-logs.log".to_string());
    let docker = Docker::connect_with_local_defaults().unwrap();
    match docker.create_container(Some(CreateContainerOptions{
        name:"test-random-messages".to_string(),
        platform: None
    }),Config {
        hostname: Some("test-random-messages".to_string()),
        tty: Some(false),
        env: Some(vec![            
            "SLEEP_TIME=0.01".to_string(),
            "LOOP_LIMIT=5".to_string(),
        ]),
        image: Some("random_messages:latest".to_string()),
        ..Default::default()
    }).await {
        Ok(result) => {
            println!("Create Container: {:?}",result);
            match docker.start_container::<String>(&result.id, None ).await {
                Ok(_) => {
                    let container_id: String = result.id.clone();
                    println!("Container ID: {}",container_id);
                    let mut logs = docker_logs(container_id.clone(),30).await;
                    
                    while let Some(log_result) = logs.next().await {
                        match log_result {
                            Ok(log_output) => {
                                match log_output {
                                    LogOutput::Console { message } =>{
                                        logger.write(&message);
                                    }
                                    _ => continue
                                };
                            },
                            Err(error) => {
                                eprintln!("{:?}",error);
                                assert!(false);
                                break;
                            }
                        }
                    }
                    if let Err(error) = docker.remove_container(container_id.as_str(), Some(RemoveContainerOptions{
                        force:true,
                        ..Default::default()
                    })).await {              
                        eprintln!("docker remove container error: {}",error);
                        assert!(false);
                    }
                    else{
                        assert!(true);
                    }
                }
                Err(error) => {
                    eprintln!("start_container error: {}",error);
                    assert!(false);
                }
            }
        }
        Err(error) => {
            eprintln!("Create Container: {:?}",error);
            assert!(false);
        }
    }
    
}