The ability to analyze data as it streams from its source to its destination is a key enabler
for making better decisions faster. We have attempted Challenge #2
and have created a webapp
that attempts to gamify the stimulation of a well. The goal is to score the highest and stay
atop the leaderboard! The user's score is calculated in realtime by our streaming application
architecture!
Mobile-first webapp, with no client-side dependencies. It is simple to use and easy to access.
The app's target audience is the Person In Charge (PIC) of the stimulation job. There would also be a full browser experience that could show more job info than the mobile version.
The goal is to manage the cost of the job, by controlling rate, key chemicals, and sand concentration. The realtime data is measured against the plan or design and a score is calculated everytime new data is received from the job site ~ 1 sec on average.
We (re)stream, or playback, the realtime data from OSIsoft PI into Azure Event Hub. From there the data is picked up by Azure Stream Analytics where it can be transformed, enhanced, and analyzed. Machine Learning, storage in an Azure Data Lake, and other Azure toolsets are all available for data processing using this architecture! Once the data processing is complete, the data is pushed back to Azure Event Hub where it can be picked up by a client consumer - i.e. WebApp, SQL, or even OSIsoft PI!
Feature | Status |
---|---|
Streaming Data | fully implemented |
Streaming Analytics | fully implemented |
SAP Integration | proof of concept |
Thin Web Client | fully implemented |
User Scoring | fully implemented |
User Leaderboard | design concept |
Recommend Operational Changes | future state |
Write Back Results to PI | future state |
- Angular
- Highcharts
- .NET Core 2.0 / .NET Standard
- Azure Event Hub
- Azure Storage
- Serilog
- Application Insights
- Visual Studio 2017
- Visual Studio Team Services
- Slack
- DotNet Core 2.0
- PI-Web-API-Client-DotNet-Core
- Microsoft.Azure.EventHubs
- Autofac
- Newtonsoft.Json
Each part of the application stack needs to be build individually and they all work together to produce the product.
- strange-piwebapi (get data from piwebapi)
- open the solution in visual studio
nuget restore
- build
- EventPublisher.ConsoleApp (publish data from strange-piwebapi into Azure Event Hub)
- open the solution in visual studio
nuget restore
- build
- Azure Event Hub (configure only, no source code)
- Azure Stream Analytics (configure only, no source code)
- EventHubAPI (web client service layer, websockets, etc)
- open the solution in visual studio
nuget restore
- build
- collections (webapp)
> npm install
> npm intall -g @angular/cli
> ng build
- strange-piwebapi: runs as a client anywhere (Azure VM for Hackathon)
- navigate to the
/bin/Release/netcoreapp2.0
- run
dotnet strange-piwebapi.dll
- navigate to the
- EventPublisher.ConsoleApp: runs as a client anywhere (Azure VM for Hackathon)
- navigate to the
/bin/Release/netcoreapp2.0
- run
dotnet Hckthn.EventPublisher.ConsoleApp.dll
- navigate to the
- Azure Event Hub: its a cloud service... just let Microsft manage this one!
- Azure Stream Analytics: oh, glorious cloud!
- EventHubAPI: azure app service
- enable 'websockets' on the Azure app service
- navigate to the
/bin/Release/netcoreapp2.0
- run
dotnet EventHubAPI.dll
- collections: azure app service
node ./src/server/index.js
- Danny.Burrows - Monscierge
- Don.Morrison - Devon Energy
- Steve.Pankratz - Devon Energy
- Jon.Slominski - White Star Petroleum
- Devon Koetter-Mason - Devon Energy