Skeptic fix

This commit is contained in:
Francis Lalonde 2018-10-18 10:10:23 -04:00
parent 0b61c01550
commit 851463b193
14 changed files with 31 additions and 50 deletions

View File

@ -15,7 +15,7 @@ CARGO_BUILD_FLAGS ?=
# 'test' is a friendly alias for 'unit_test' # 'test' is a friendly alias for 'unit_test'
test: test:
$(CARGO_CMD) test $(CARGO_CMD) test --features="skeptic"
examples: examples:
$(CARGO_CMD) build --examples $(CARGO_CMD) build --examples

View File

@ -44,7 +44,7 @@ Here's a basic aggregating & auto-publish counter metric:
```$rust,skt-run ```$rust,skt-run
let bucket = Bucket::new(); let bucket = Bucket::new();
bucket.set_target(Text::output(io::stdout())); bucket.set_target(Stream::stdout());
bucket.flush_every(Duration::from_secs(3)); bucket.flush_every(Duration::from_secs(3));
let counter = bucket.counter("counter_a"); let counter = bucket.counter("counter_a");
counter.count(8) counter.count(8)
@ -53,12 +53,13 @@ counter.count(8)
Persistent apps wanting to declare static metrics will prefer using the `metrics!` macro: Persistent apps wanting to declare static metrics will prefer using the `metrics!` macro:
```$rust,skt-run ```$rust,skt-run
metrics! { METRICS = "my_app" => metrics! { METRICS = "my_app" => {
pub COUNTER: Counter = "my_counter"; pub COUNTER: Counter = "my_counter";
}
} }
fn main() { fn main() {
METRICS.set_target(Graphite::output("graphite.com:2003").unwrap()); METRICS.set_target(Graphite::send_to("graphite.com:2003").unwrap().input());
COUNTER.count(32); COUNTER.count(32);
} }
``` ```

View File

@ -3,8 +3,10 @@ Templates
Use `cargo test --features="skeptic"` to run the examples in the README using the `skeptic` crate. Use `cargo test --features="skeptic"` to run the examples in the README using the `skeptic` crate.
```rust,skt-run ```rust,skt-run
#[macro_use]
extern crate dipstick; extern crate dipstick;
use dipstick::*; use dipstick::*;
use std::time::Duration;
fn main() {{ fn main() {{
{} {}
@ -14,8 +16,8 @@ fn main() {{
```rust,skt-fail ```rust,skt-fail
extern crate dipstick; extern crate dipstick;
use dipstick::*; use dipstick::*;
use dipstick::error::Error;
use std::result::Result; use std::result::Result;
use std::time::Duration;
fn main() {{ fn main() {{
run().ok(); run().ok();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -4,35 +4,35 @@ extern crate dipstick;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use std::io;
use dipstick::{Proxy, Stream, InputScope, Input, Naming}; use dipstick::{Proxy, Stream, InputScope, Input, Naming};
fn main() { fn main() {
let root = Proxy::default(); let root_proxy = Proxy::default();
let sub = root.add_naming("sub"); let sub = root_proxy.add_naming("sub");
let count1 = root.counter("counter_a"); let count1 = root_proxy.counter("counter_a");
let count2 = sub.counter("counter_b"); let count2 = sub.counter("counter_b");
loop { loop {
root.set_target(Stream::write_to(io::stdout()).input()); let stdout = Stream::stdout().input();
root_proxy.set_target(stdout.clone());
count1.count(1); count1.count(1);
count2.count(2); count2.count(2);
// route every metric from the root to stdout with prefix "root" // route every metric from the root to stdout with prefix "root"
root.set_target(Stream::write_to(io::stdout()).add_naming("root").input()); root_proxy.set_target(stdout.add_naming("root"));
count1.count(3); count1.count(3);
count2.count(4); count2.count(4);
// route metrics from "sub" to stdout with prefix "mutant" // route metrics from "sub" to stdout with prefix "mutant"
sub.set_target(Stream::write_to(io::stdout()).add_naming("mutant").input()); sub.set_target(stdout.add_naming("mutant"));
count1.count(5); count1.count(5);
count2.count(6); count2.count(6);
// clear root metrics route, "sub" still appears // clear root metrics route, "sub" still appears
root.unset_target(); root_proxy.unset_target();
count1.count(7); count1.count(7);
count2.count(8); count2.count(8);
@ -42,7 +42,7 @@ fn main() {
count2.count(10); count2.count(10);
// go back to initial single un-prefixed route // go back to initial single un-prefixed route
root.set_target(Stream::write_to(io::stdout()).input()); root_proxy.set_target(stdout.clone());
count1.count(11); count1.count(11);
count2.count(12); count2.count(12);

View File

@ -1,23 +1,18 @@
//! A sample application asynchronously printing metrics to stdout. //! A sample application asynchronously printing metrics to stdout.
#[macro_use]
extern crate dipstick; extern crate dipstick;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use dipstick::{Proxy, Stream, Counter, InputScope, Input, Formatting, AppLabel, use dipstick::{Stream, InputScope, Input, Formatting, AppLabel,
Name, Kind, LineTemplate, LineFormat, LineOp, LabelOp}; Name, Kind, LineTemplate, LineFormat, LineOp, LabelOp};
metrics!{
COUNTER: Counter = "counter_a";
}
struct MyFormat; struct MyFormat;
impl LineFormat for MyFormat { impl LineFormat for MyFormat {
fn template(&self, name: &Name, _kind: Kind) -> LineTemplate { fn template(&self, name: &Name, _kind: Kind) -> LineTemplate {
vec![ vec![
LineOp::Literal(format!("{} ", name.join("."))), LineOp::Literal(format!("{} ", name.join(".")).into()),
LineOp::ValueAsText, LineOp::ValueAsText,
LineOp::Literal(" ".into()), LineOp::Literal(" ".into()),
LineOp::LabelExists("abc".into(), LineOp::LabelExists("abc".into(),
@ -29,11 +24,11 @@ impl LineFormat for MyFormat {
} }
fn main() { fn main() {
Proxy::set_default_target(Stream::stderr().formatting(MyFormat).input()); let counter = Stream::stderr().formatting(MyFormat).input().counter("counter_a");
AppLabel::set("abc", "xyz"); AppLabel::set("abc", "xyz");
loop { loop {
// report some metric values from our "application" loop // report some metric values from our "application" loop
COUNTER.count(11); counter.count(11);
sleep(Duration::from_millis(500)); sleep(Duration::from_millis(500));
} }

View File

@ -191,8 +191,8 @@ pub mod test {
#[test] #[test]
fn context_labels() { fn context_labels() {
AppLabel::set("abc".into(), "456".into()); AppLabel::set("abc", "456");
ThreadLabel::set("abc".into(), "123".into()); ThreadLabel::set("abc", "123");
assert_eq!(Arc::new("123".into()), labels!().lookup("abc").unwrap()); assert_eq!(Arc::new("123".into()), labels!().lookup("abc").unwrap());
ThreadLabel::unset("abc"); ThreadLabel::unset("abc");
assert_eq!(Arc::new("456".into()), labels!().lookup("abc").unwrap()); assert_eq!(Arc::new("456".into()), labels!().lookup("abc").unwrap());
@ -213,8 +213,8 @@ pub mod test {
#[test] #[test]
fn value_labels() { fn value_labels() {
AppLabel::set("abc".into(), "456".into()); AppLabel::set("abc", "456");
ThreadLabel::set("abc".into(), "123".into()); ThreadLabel::set("abc", "123");
let mut labels = labels!{ let mut labels = labels!{
"abc" => "789", "abc" => "789",
}; };

View File

@ -164,7 +164,7 @@ mod test {
use core::proxy::Proxy; use core::proxy::Proxy;
metrics!{TEST: Proxy = "test_prefix" => { metrics!{TEST: Proxy = "test_prefix" => {
M1: Marker = "failed"; pub M1: Marker = "failed";
C1: Counter = "failed"; C1: Counter = "failed";
G1: Gauge = "failed"; G1: Gauge = "failed";
T1: Timer = "failed"; T1: Timer = "failed";

View File

@ -9,7 +9,7 @@ use std::sync::Arc;
/// Print commands are steps in the execution of output templates. /// Print commands are steps in the execution of output templates.
pub enum LineOp { pub enum LineOp {
/// Print a string. /// Print a string.
Literal(String), Literal(Vec<u8>),
/// Lookup and print label value for key, if it exists. /// Lookup and print label value for key, if it exists.
LabelExists(String, Vec<LabelOp>), LabelExists(String, Vec<LabelOp>),
/// Print metric value as text. /// Print metric value as text.
@ -23,7 +23,7 @@ pub enum LineOp {
/// Print commands are steps in the execution of output templates. /// Print commands are steps in the execution of output templates.
pub enum LabelOp { pub enum LabelOp {
/// Print a string. /// Print a string.
Literal(String), Literal(Vec<u8>),
/// Print the label key. /// Print the label key.
LabelKey, LabelKey,
/// Print the label value. /// Print the label value.
@ -101,7 +101,7 @@ impl LineFormat for SimpleFormat {
header.push(' '); header.push(' ');
LineTemplate { LineTemplate {
ops: vec![ ops: vec![
Literal(header), Literal(header.into_bytes()),
ValueAsText, ValueAsText,
NewLine, NewLine,
] ]
@ -109,23 +109,6 @@ impl LineFormat for SimpleFormat {
} }
} }
//enum Parsed {
// Literal(String),
// Name()
// Value(Value),
// StaticLabel(String),
// DynamicLabel(String),
//}
//
//struct TemplateFormat {
// tokens: Vec<LineToken>
//}
//
//fn parse(template: &str) -> TemplateFormat {
//
//}
#[cfg(test)] #[cfg(test)]
pub mod test { pub mod test {
use super::*; use super::*;
@ -141,7 +124,7 @@ pub mod test {
header.push(' '); header.push(' ');
LineTemplate { LineTemplate {
ops: vec![ ops: vec![
Literal(header), Literal(header.into()),
ValueAsText, ValueAsText,
Literal(" ".into()), Literal(" ".into()),
ScaledValueAsText(1000), ScaledValueAsText(1000),