Just FYI, I put a PR up for this feature:
https://github.com/apache/metron/pull/1250.  I believe I've addressed
everyone's questions either in the PR description or the code itself.  I'm
think we can continue the discussion there.

On Fri, Oct 19, 2018 at 12:02 PM Otto Fowler <ottobackwa...@gmail.com>
wrote:

> I believe the issue of introducing and supporting higher latency
> enrichments is a systemic one, and should be solved as such,
> with the rest and other higher latency enrichments build on top of that
> framework.
>
>
>
>
> On October 19, 2018 at 12:22:28, Ryan Merriman (merrim...@gmail.com)
> wrote:
>
> Thanks Casey, good questions.
>
> As far as the verbs go, just thinking we might want to support calls other
> than GET at some point. For the use case stated (enriching messages from
> 3rd party services) GET is all we need. Probably a moot point anyways
> since every http library will support the different HTTP verbs.
>
> Agreed on the caching. I will defer to those that are more familiar with
> the Stellar internals on what the correct approach is.
>
> I was thinking the same thing with regards to the client libraries. Apache
> HttpComponents is probably the safest choice but OkHttp looks nice and
> could reduce effort and complexity as long as it meets our requirements.
>
> On Fri, Oct 19, 2018 at 10:58 AM Casey Stella <ceste...@gmail.com> wrote:
>
> > I think it makes a lot of sense. A couple of questions:
> >
> > - What actions do you see the REST verbs corresponding to? I would
> > understand GET (which is in effect "evaluate an expression", right?),
> > but
> > I'm not sure about the others.
> > - We should probably be careful about caching stellar expressions. Not
> > all stellar expressions are deterministic (e.g. PROFILE_GET may not be
> > as
> > the lookback window is bound to current time). Ultimately, I think we
> > should probably bake whether a function is deterministic into stellar so
> > that *stellar* can cache where appropriate (e.g. if every part of an
> > expression is deterministic, then pull from cache otherwise recompute).
> > All of this to say, if you're going to make it configurable, IMO we
> > should
> > make it a configuration that the user passes in at request time so they
> > have the control over whether the expression is safe to cache or
> > otherwise.
> >
> > Without more compelling reasons to not do so, I'd suggest we use HTTP
> > Components as it's another apache project and under active
> > development/support. I'd also be ok with OkHttp if it's actively
> > maintained.
> >
> > On Fri, Oct 19, 2018 at 11:46 AM Ryan Merriman <merrim...@gmail.com>
> > wrote:
> >
> > > I want to open up discussion around adding a Stellar REST client
> > function.
> > > There are services available to enrich security telemetry and they are
> > > commonly exposed through a REST interface. The primary purpose of this
> > > discuss thread to collect requirements from the community and agree on
> a
> > > general architectural approach.
> > >
> > > At a minimum I see a Stellar REST client supporting:
> > >
> > > - Common HTTP verbs including GET, POST, DELETE, etc
> > > - Option to provide headers and request parameters as needed
> > > - Support for basic authentication
> > > - Proper request and error handling (we can discuss further how this
> > > should work)
> > > - SSL support
> > > - Option to use a proxy server (including authentication)
> > > - JSON format
> > >
> > > In addition to these functional requirements, I would also propose we
> > > include these performance requirements:
> > >
> > > - Provide a configurable caching layer
> > > - Provide a mechanism for pooling connections
> > > - Provide clear documentation and guidance on how to properly use this
> > > feature since there is a significant risk of introducing latency
> > issues
> > >
> > > What else would you like to see included?
> > >
> > > I think the primary architectural decision we need to make (based on
> the
> > > agreed upon requirements of course) is an appropriate Java HTTP/REST
> > client
> > > library. Ideally we choose a library that supports everything we need
> > > OOTB. I think the majority of the work for this feature will involve
> > > wrapping this library in a Stellar function and exposing the
> > configuration
> > > knobs through Metron's configuration interface (Ambari, Zookeeper,
> > etc). I
> > > have done some very light research and here is my initial list:
> > >
> > > - Apache HttpComponents - https://hc.apache.org/
> > > - Has support for all of the features listed above as far as I can
> > tell
> > > - Doesn't introduce a large number of new dependencies (am I wrong
> > > here?)
> > > - Is sort of included already (we will need to upgrade from
> > > httpclient)
> > > - Lower level
> > > - Google HTTP Client Library for Java -
> > >
> > >
> >
> https://developers.google.com/api-client-library/java/google-http-java-client/
> > > - Higher level API with pluggable components
> > > - Introduces dependencies (we've had issues with Guava in the past)
> > > - Netflix Ribbon - https://github.com/Netflix/ribbon
> > > - Has a lot of nice features that may be useful in the future
> > > - Introduces dependencies (including guava)
> > > - Hasn't been committed to in the last 5-6 months
> > > - Unirest - https://github.com/Kong/unirest-java
> > > - Lightweight API built on top of HttpComponents
> > > - Pluggable serialization library (jackson is an issue for us so
> > this
> > > is nice)
> > > - Also has not received a commit in a while
> > > - OkHttp - http://square.github.io/okhttp/
> > > - Good documentation and looks easy to use
> > > - Actively maintained
> > >
> > > Obviously we have a lot of choices. I think it comes down to balancing
> > the
> > > tradeoff between ease of use (HttpComponents will likely require the
> most
> > > work since it is lower level) and capability. Introducing additional
> > > dependencies is something we should also be mindful of because our
> > shading
> > > practices.
> > >
> > > This should get us started. Let me know what you think!
> > >
> >
>
>

Reply via email to