Giter Club home page Giter Club logo

tempus-edge's Introduction

tempus-edge's People

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

weinenglong

tempus-edge's Issues

Remove JS-Filter's reliance on the modified java container sdk

The polling client is no longer needed as part of the sdk. Modify the javascript filter edge_app to use the unmodified java sdk.

This will require changing the PollingClient interface implementation in the listnr folder into a n IofogApiLIstener interface implementation.

Repackage tempus edge protos

It was misguided to place the protobuf defs in multiple package locations.

Package all protobuf defs in com.hashmapinc.tempus.edge.protos and update all edge app import statements to import from this package.

Implement a conditionFilter iofog service

The service should accept json objects from the iofog message stream, evaluate if the data passes a condition (work order bit is set), and send the data back to the iofog message stream if the condition passes.

Because the bit value may require some bit manipulation to evaluate, this service will not be implemented with the existing jsonFilter edge app. In the event that a suitable boolean operation can be configured for jsonFilter, then this task should be discarded in favor of reusing the existing functionality in the jsonFilter.

refactor opc applications to use lib

Move shared opc logic into the lib/jvm area and gut opc-client and opc-tag-filter so they use the shared opc logic in lib and only have app-specific logic.

As a developer, I would like to access iofog java container sdk from maven central

The iofog java container sdk is currently only accessible by downloading a jar file from a github page and installing the JAR to a developer's local repository cache in .m2

This sucks. It would be dramatically better for these JARs to be accessible from maven central.

Find a way to get these jars into central. This likely involves contacting EdgeWorx and having them do it. Otherwise, get creative.

Add lib folder to tempus edge

Lib will hold all reusable edge application code. It should have the following structure:

  • lib/python
  • lib/jvm
  • lib/go

in another card, the edge applications will have to be refactored to contain only the necessary logic that is unique to that app.

As a developer, I would like a tagFilter iofog service.

The minimum implementation should send a tag list to the iofog message stream.

Additional features (on other cards) should implement regex matching from iofog configs to get matching tags from an opc instance and send the passing tags to the opc client through iofog messaging.

The tagFilter should support regex device pairing of tags

given a configuration map of regexPattern -> Device Name, create a device name for each passing tag in the filtered tag list. This list of (tag, device name)'s should be sent to the iofog message queue.

Also, make sure that the opcClient is modified at least enough to not fail when getting this new list format. Full use of the list will be implemented in the opcClient in another card.

Modify the repository README to better reflect the repository

The current README is a great tutorial for using iofog, but it is probably more appropriate to make a simpler / generally instructive README at the root of the project and move the current readme to another location in docs. The new README should still link to the current README.

Allow opcClient to request tagList through iofog messaging

Implement the functionality for opcClient to send a "getTagList" request message to iofog messaging that will be read and handled by the tagFilter service which will then send the latest tag list to iofog messaging for opcClient to consume.

The goal with this feature is to make opcClient slightly more stateless so that if it ever goes down and comes up unexpectedly, it can get the latest tag list without waiting for the tagFilter service to decide to send the latest list.

This card will require updating both the opcClient and the tagFilter services.

Create a dev-friendly test app from the ioFog test message generator project

The test message generator project has huge potential to help developers test their edge apps locally.

Modify the project (https://github.com/iotracks/test-message-generator) to make it easy to import the test server as a test dependency in JVM projects.

The service should support acceptance of IoMessage types and send them to connected applications. It should also support acceptance of config JSON objects and send those configs to local running edge applications.

Those two requirements should be sufficient for an initial usage.

Consolidate config protobuf defs and message Protocol/type consts

The protobuf definitions for the configs of each application should be consolidated into a single location. This could be in the applications directory or maybe in a separate config directory.

Each protobuf should be packaged to com.hashmapinc.tempus.edge.<application_name>.proto.config

While you're at it, also consolidate all MESSAGE TYPE constants into a single location. This will need to be done for Go, Python, and JVM applications. Make sure to use consistent naming and package these to com.hashmapinc.tempus.edge.message_types

Add missing README's

Add readme's to:

  • opc-client
  • mqtt-client
  • json-filter
  • client-webapp
  • timeseries-generator

All future applications shall have a README at creation time, or pull requests will be denied back into the DEV branch.

Modify the mqtt client to accept tempus edge configs

This requires updating the code to respond to incoming messages from the track-manager. The element will need to be able to read track configs in protobuf format, extract the necessary components, and update local state.

Should opc connection configs exist in both opcClient AND tagFilter?

Currently, the configuration from iofog for opcClient contains opc connection details (security policy and endpoint). This same configuration is separately sent to the tagFilter to be able to access an opc server.

This means the same configuration exists in 2 places. That doesn't feel right.

Would it be better to consolidate the configs to only one service? The config could be shared between the services by implementing a call/response for opcConfigs on the iofog message stream.

Until a decision is made on this, configs will be specified and delivered separately to each service.

Add track identification to track-manager

Given an API endpoint, the track-manager should request an identification for the track from an external DB. This identification may then be used to request track-specific features in the future.

Define standard iofog message format

Document these in the applications README.

The format should include a description of messagetypes and messagesubtypes. These are int values that represent a type and subtype of messages. This allows for more efficient int comparisons at the edge for routing messages to the appropriate handlers.

The tagFilter should support regex matching from iofog configs

Given a whitelist and blacklist (blacklist having highest priority) of regex patterns, query an opc service (hard coded is ok for this task) to get a list of tags.

Send the tags that match the whitelist regex AND do not match the blacklist to the iofog message stream.

Create a track-manager service

The track manager service should accept configurations from ioFog Authoring and should make reflect these configurations in a sqlite db on a shared volume accessible by the whole track.

When new configs are accepted, track-manager will send a newConfig iofog message for dependent elements to respond to on their own.

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.