mesos 0.2.5

Mesos library using the new HTTP API
Documentation

mesos-rs :globe_with_meridians:

Simple bindings for the Mesos v1 HTTP API.

Roadmap:

  • scheduler
  • executor
  • zk master detection and failover

Running

Cargo.toml:

[dependencies]
mesos = "0.2.5"
extern crate mesos;

use self::mesos::{Scheduler, SchedulerClient, run_protobuf_scheduler};
use self::mesos::proto::*;

pub struct TestScheduler;

impl Scheduler for TestScheduler {
    fn subscribed(&mut self,
                  client: &SchedulerClient,
                  framework_id: &FrameworkID,
                  heartbeat_interval_seconds: Option<f64>) {
        println!("received subscribed");
    }

    fn offers(&mut self,
              client: &SchedulerClient,
              offers: Vec<Offer>,
              inverse_offers: Vec<InverseOffer>) {
        println!("received offers");

        let mut offer_ids = vec![];
        for offer in offers {
            offer_ids.push(offer.get_id().clone());
        }
        for offer in inverse_offers {
            offer_ids.push(offer.get_id().clone());
        }

        client.decline(offer_ids, None).unwrap();
    }

    fn rescind(&mut self, client: &SchedulerClient, offer_id: &OfferID) {
        println!("received rescind");
    }

    fn update(&mut self, client: &SchedulerClient, status: &TaskStatus) {
        println!("received update");
    }

    fn message(&mut self,
               client: &SchedulerClient,
               agent_id: &AgentID,
               executor_id: &ExecutorID,
               data: Vec<u8>) {
        println!("received message");
    }

    fn failure(&mut self,
               client: &SchedulerClient,
               agent_id: Option<&AgentID>,
               executor_id: Option<&ExecutorID>,
               status: Option<i32>) {
        println!("received failure");
    }

    fn error(&mut self, client: &SchedulerClient, message: String) {
        println!("received error");
    }

    fn heartbeat(&mut self, client: &SchedulerClient) {
        println!("received heartbeat");
    }
}

fn main() {
    let url = "http://localhost:5050".to_string();
    let user = "root".to_string();
    let name = "rust http".to_string();
    let framework_timeout = 0f64;
    let framework_id = None;
    let mut scheduler = TestScheduler;

    run_protobuf_scheduler(url,
                           user,
                           name,
                           framework_timeout,
                           &mut scheduler,
                           framework_id);
}