GithubHelp home page GithubHelp logo

Encoder without EOF about client_rust HOT 5 OPEN

amunra avatar amunra commented on June 24, 2024
Encoder without EOF

from client_rust.

Comments (5)

amunra avatar amunra commented on June 24, 2024

I'm happy to raise a PR, but if I am wondering if you'd have a better suggestion, especially in the context of these upcoming changes: #149.

from client_rust.

mxinden avatar mxinden commented on June 24, 2024

I like that the client doesn't do HTTP serving and stick to the protocol, so it's 99% of what I need.

Good to hear.

What causes me trouble is just a single line of code:

    writer.write_str("# EOF\n")?;

:D

Would you consider a variant of the encode function that doesn't write out the # EOF?

Generally yes. I see the use-case of wanting to combine multiple encode outputs, whether from the same client library or different ones.

That said, in case performance is not an issue for you and you are fine with a small hack, why not encode into a String and then drop the last line?

from client_rust.

mxinden avatar mxinden commented on June 24, 2024

I'm happy to raise a PR, but if I am wondering if you'd have a better suggestion, especially in the context of these upcoming changes: #149.

I don't see how #149 would help or effect your situation. You could implement your own Collector that collects the metrics from the parts written in a different language. Though that sounds very painful.

from client_rust.

amunra avatar amunra commented on June 24, 2024

Ours is a performance-sensitive application and I'd rather not have to double-buffer :-)

We embed Rust, rather than the other way around.

from client_rust.

amunra avatar amunra commented on June 24, 2024

The reason why I was mentioning PR #149 is that as I was looking at it I noticed the new encode is implemented as:

/// Encode the metrics registered with the provided [`Registry`] into the
/// provided [`Write`]r using the OpenMetrics text format.
pub fn encode<W>(writer: &mut W, registry: &Registry) -> Result<(), std::fmt::Error>
where
    W: Write,
{
    registry.encode(&mut DescriptorEncoder::new(writer).into())?;
    writer.write_str("# EOF\n")?;
    Ok(())
}

pub(crate) struct DescriptorEncoder<'a> {
    writer: &'a mut dyn Write,
    prefix: Option<&'a Prefix>,
    labels: &'a [(Cow<'static, str>, Cow<'static, str>)],
}

The alternative here might be to expose the DescriptorEncoder as pub rather than pub(crate). I think an independent function is cleaner (though I can't necessarily think of a good name).

If not, I'll wait for PR #149 to be merged and raise mine after (given that code is changing anyways).

from client_rust.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.