Hi Grainier,

I just pushed an initial version of the static property to add javascript code.
It's a simple codeblock with linting enabled and a (currently very simple) 
autocomplete feature that suggests existing properties from the input event 
(currently, only if you press ctrl-space directly after typing "event" followed 
by a dot, I'll fix that soon ;-)

You can find an example how to use it here:
https://github.com/apache/incubator-streampipes-examples/blob/dev/streampipes-pipeline-elements-examples-processors-jvm/src/main/java/org/apache/streampipes/pe/examples/jvm/staticproperty/CodeInputExampleController.java

Feedback and ideas for improvement are welcome!

Dominik


On 2020/05/17 12:36:05, Grainier Perera <[email protected]> wrote: 
> Hi Dominik,
> 
> Thank you. I'll work on `Implement JS evaluator` [1].
> 
> [1] https://issues.apache.org/jira/browse/STREAMPIPES-135
> 
> Grainier.
> 
> On Sun, 17 May 2020 at 18:02, Dominik Riemer <[email protected]> wrote:
> 
> > Hi Grainier,
> >
> > great! I created an umbrella issue for that:
> > https://issues.apache.org/jira/browse/STREAMPIPES-132
> >
> > I'll now start to implement the new static property for entering code.
> >
> > Dominik
> >
> > On 2020/05/15 01:29:44, Grainier Perera <[email protected]>
> > wrote:
> > > Hi,
> > >
> > > I'm +1 to the idea of `UserDefinedOutputStrategy`. As you said, that'll
> > be
> > > re-usable in the future processors as well. So let's proceed with that.
> > >
> > > Regards,
> > > Grainier
> > >
> > > On Fri, 15 May 2020 at 01:37, Dominik Riemer <[email protected]> wrote:
> > >
> > > > Hi,
> > > > cool, that sounds very good!
> > > >
> > > > Concerning the output, I think there are two ways to achieve this:
> > > > - A collection static property in conjunction with a runtime resolvable
> > > > output strategy that creates the output schema based on the input from
> > the
> > > > collection
> > > > - Or we create a new output strategy, e.g., let's call it
> > > > UserDefinedOutputStrategy, which would render a UI component to let
> > users
> > > > add/remove/change event properties from the input schema. I also like
> > the
> > > > idea of preselecting all input properties.
> > > >
> > > > I personally tend towards the second option as such a strategy might be
> > > > useful for other pipeline elements as well and it would ease the model
> > > > definition. We could also extend this component in the future, e.g., by
> > > > letting users enrich metadata such as measurement units directly in a
> > > > processor.
> > > >
> > > > But I'm also open to the first option and we can also just start
> > > > implementing to see what works best.
> > > >
> > > > I'd also be happy to help with the implementation, e.g., I could work
> > on
> > > > the new static property for code input or the output strategy!
> > > >
> > > > Dominik
> > > >
> > > > On 2020/05/14 11:59:36, Grainier Perera <[email protected]>
> > > > wrote:
> > > > > Hi,
> > > > >
> > > > > +1 to the idea of having a collection property containing the fields
> > of
> > > > the
> > > > > output properties. Also, If we can show the user with available
> > fields
> > > > with
> > > > > metadata (of input event) populated in that same collection property,
> > > > then
> > > > > the user can add/remove/updates fields easily. Let's say they just
> > have
> > > > to
> > > > > return a map containing all the fields they defined in output
> > properties
> > > > > (i.e return {"existingId": 1, "existingTempInKelvin": 301,
> > > > > "newTempInCelsius": 28 } ).
> > > > >
> > > > > [image: sample.png]
> > > > >
> > > > > Regards,
> > > > > Grainier.
> > > > >
> > > > > On Thu, 14 May 2020 at 12:33, Patrick Wiener <[email protected]>
> > wrote:
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > sounds reasonable.
> > > > > >
> > > > > > I share the thoughts of Philipp regarding the output schema. But
> > as you
> > > > > > said Grainier, we can also improve :)
> > > > > >
> > > > > > btw: I really like the idea to also allow the more technical user
> > to
> > > > > > easily integrate their function snippets without having
> > > > > > to care about the actual execution. This gets a more FaaS like
> > feeling
> > > > for
> > > > > > streaming.
> > > > > >
> > > > > > Patrick
> > > > > >
> > > > > > > Am 14.05.2020 um 08:26 schrieb Philipp Zehnder <
> > [email protected]>:
> > > > > > >
> > > > > > > Hi,
> > > > > > >
> > > > > > > it would be very useful to have such a processor.
> > > > > > >
> > > > > > > I like the ideas for 1 & 2 and I think we can do it this way.
> > > > > > >
> > > > > > > Actually I think that the definition of the output scheme could
> > be
> > > > quite
> > > > > > tricky.
> > > > > > > Because users can do anything with the event.
> > > > > > >
> > > > > > > How about we provide an option property?
> > > > > > > Users can select whether they want to define the whole event or
> > just
> > > > > > append properties.
> > > > > > >
> > > > > > > For the configurations of the properties we could do something
> > > > similar
> > > > > > then we have in the PLC4xS7Adapter.
> > > > > > > A collection property containing the fields of the output
> > properties.
> > > > > > > Therefore, we have to decide what information we have to
> > provide. I
> > > > > > think if we would support all options it becomes very cluttered
> > for the
> > > > > > user.
> > > > > > >
> > > > > > > What do you think?
> > > > > > >
> > > > > > > Philipp
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >> On 14. May 2020, at 06:55, Grainier Perera <
> > > > [email protected]>
> > > > > > wrote:
> > > > > > >>
> > > > > > >> Hi Dominik,
> > > > > > >>
> > > > > > >> I agree. We have to do some enhancements make this processor
> > user
> > > > > > friendly.
> > > > > > >> Like you said it's nice to have;
> > > > > > >>   1. A new static property that supports code highlighting &
> > syntax
> > > > > > >> checking. We can simply do such client-side validations using
> > > > > > highlight.js
> > > > > > >> (BSD) [1], jshint (MIT) [2], etc...
> > > > > > >>   2. A mechanism to show the user with available fields they can
> > > > use to
> > > > > > >> write code (similar to what you've done with usable templates in
> > > > > > >> EmailPublisher using HtmlInputParameter).
> > > > > > >>   3. A mechanism to map output schema.
> > > > > > >>
> > > > > > >> I think 1 & 2 go together and for the 3rd requirement given
> > that we
> > > > are
> > > > > > >> targetting a more technical user group for this processor, we
> > can
> > > > let
> > > > > > them
> > > > > > >> define the output. Otherwise, it would be quite difficult to
> > derive
> > > > > > return
> > > > > > >> type from the JS. Moreover, I'm planning to use Java's builtin
> > > > > > ScriptEngine
> > > > > > >> to eval. Of course, there'll be limitations. But, we can always
> > > > improve
> > > > > > >> them :)
> > > > > > >>
> > > > > > >> [1] https://highlightjs.org/
> > > > > > >> [2] https://jshint.com/
> > > > > > >>
> > > > > > >> Regards,
> > > > > > >> Grainier.
> > > > > > >>
> > > > > > >> On Thu, 14 May 2020 at 00:53, Dominik Riemer <[email protected]
> > >
> > > > wrote:
> > > > > > >>
> > > > > > >>> Hi Grainier,
> > > > > > >>>
> > > > > > >>> in my opinion, this would definitely be a very interesting
> > > > addition! We
> > > > > > >>> already briefly discussed such a feature in the past, before we
> > > > went
> > > > > > to the
> > > > > > >>> ASF. I’d say that a JS evaluator would be definitely useful to
> > a
> > > > > > slightly
> > > > > > >>> more technical target user group, but would provide great
> > > > flexibility
> > > > > > for,
> > > > > > >>> e.g., data harmonization tasks. So let’s discuss what is
> > needed to
> > > > > > >>> implement this! I’d guess that we (maybe) need to add some
> > > > > > enhancements to
> > > > > > >>> the core to make this processor good from a usability
> > perspective.
> > > > > > >>>
> > > > > > >>> From a conceptual point of view, I guess the JS processor would
> > > > have no
> > > > > > >>> specific input requirements and a single static property that
> > > > allows
> > > > > > users
> > > > > > >>> to enter the code (maybe it would be cool to add a new static
> > > > property
> > > > > > here
> > > > > > >>> that supports code highlighting or even syntax checking). The
> > only
> > > > open
> > > > > > >>> issue I see is the output schema – we would somehow need to
> > > > extract the
> > > > > > >>> output from the JS function. This could probably partially be
> > done
> > > > > > using
> > > > > > >>> the CustomTransformOutput (see
> > > > > > >>>
> > > > http://streampipes.apache.org/docs/docs/dev-guide-output-strategies/),
> > > > > > >>> but we would somehow need to derive type information from the
> > JS
> > > > > > function
> > > > > > >>> or introduce a feature to let users define/refine the output
> > > > manually
> > > > > > >>> (e.g., to add semantic metadata).
> > > > > > >>>
> > > > > > >>> What do you think would be best? And would you evaluate the JS
> > > > code in
> > > > > > >>> Java or somehow else?
> > > > > > >>>
> > > > > > >>> Also, as I’ve just started to improve the SDK (e.g., supporting
> > > > > > optional
> > > > > > >>> static properties and an easier way to define and extract model
> > > > > > >>> parameters), we can collect your requirements for the JS
> > processor
> > > > and
> > > > > > >>> extend the SDK if needed, just say what you would like to have
> > 😉
> > > > > > >>>
> > > > > > >>> Dominik
> > > > > > >>>
> > > > > > >>>
> > > > > > >>> From: Grainier Perera <[email protected]>
> > > > > > >>> Sent: Wednesday, May 13, 2020 2:41 PM
> > > > > > >>> To: [email protected]
> > > > > > >>> Subject: Data processor to evaluate JavaScript
> > > > > > >>>
> > > > > > >>> Hi all,
> > > > > > >>>
> > > > > > >>> I'm planning to implement a JavaScript eval data processor. As
> > the
> > > > name
> > > > > > >>> suggests, users will be able to write some JavaScript code
> > which
> > > > takes
> > > > > > in
> > > > > > >>> an event (as a map), do some processing on the event, and
> > return a
> > > > new
> > > > > > map
> > > > > > >>> which then gets converted to an sp-event.
> > > > > > >>>
> > > > > > >>> example js:
> > > > > > >>> function process(event) {
> > > > > > >>>   // do processing here.
> > > > > > >>>   // return processed event.
> > > > > > >>>   return {id: http://event.id, tempInCelsius:
> > (event.tempInKelvin
> > > > -
> > > > > > >>> 273.15)};
> > > > > > >>> };
> > > > > > >>>
> > > > > > >>> Will this be a good addition to pipeline-elements? What do you
> > > > think?
> > > > > > >>>
> > > > > > >>> Regards,
> > > > > > >>> Grainier.
> > > > > > >>>
> > > > > > >>>
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 

Reply via email to