Discussion Ardent Industry API

Ardent Industry API & Website​

Last updated: 12 June 2023

www.ardent-industry.com

Source code for website:
https://github.com/iaincollins/ardent-www

Ardent API​

Documentation and source code for the REST API:
https://github.com/iaincollins/ardent-api

Ardent Collector​

Source code for the service that collects data submitted to EDDN and generates reports:
https://github.com/iaincollins/ardent-collector

About this software​

The API was created in part to support further development of new features in the app ICARUS Terminal and because there isn't already an open API for trade data submitted to EDDN by CMDRs and there are no open source platforms.

The service is currently an API only but both a website and integration with ICARUS Terminal are planned.
 
Last edited:
Awesome. Going to have a play with this, and potentially incorporate into EDCoPilot.
Currently i always exclude Fleet Carriers from search results, as no way of reliably knowing if they are dockable or not. (I dont think its in the EDDN feed)
 
Last edited:
Awesome. Going to have a play with this, and potentially incorporate into EDCoPilot.
Currently i always exclude Fleet Carriers from search results, as no way of reliably knowing if they are dockable or not. (I dont think its in the EDDN feed)
Oh hey there, good to hear from you! :)

That's interesting to hear, I feel the same way about Fleet Carriers and only use them for trading if they have high sell prices for a specific item like Tritium or uncommon items (e.g. Thargoid related) as the majority of them time when I get to where a carrier is, it's either locked down or it's moved on. I guess folks using them don't run EDDN clients reliably.

I may set the default in all trade APIs to exclude them, and have a special page / API for fleet carriers, maybe something that works like (even scrapes from?) The Reddit trading site, so folks can more reliably find active carriers.

Super happy to accommodate anything I can for EDCoPilot, please ket me know if you have any request for functionality, trade related or otherwise!
 
Last edited:
Update to say I released the source code today and moved the service from Alpha to Beta.

I have updated the post above to point to that documentation and added some release notes.
 
I've released a very simple and early website at ardent-industry.com which provides a way to browse the data in the API.

It's not especially useful right now but it helps with development and testing of the underlying API.

I've added the link to the website (and the source code) to the post.
 
I know it's still early in design, but it looks great. Thank you for all your hard work both on this and ICARUS.

Is there anything in particular you would like for us to test?
I've loaded it up on a few devices just to see if I could find any issues and the only thing I've noticed is that I don't have a way to make it full screen on Edge for mobile.
 
I know it's still early in design, but it looks great. Thank you for all your hard work both on this and ICARUS.

Is there anything in particular you would like for us to test?
I've loaded it up on a few devices just to see if I could find any issues and the only thing I've noticed is that I don't have a way to make it full screen on Edge for mobile.
Hey thanks for asking!

Hmm I think not much to test in the UI just yet, am ware it's a bit simple and I'm still shaking out some issues to improve performance / add additional missing query options, and stuff like a proper mobile experience is not implemented yet (but should be over the next couple of days).

That's really interesting feedback though, happy to add that as an option - I hadn't even thought about that.

I've been feeling like like probably the best fit for the UX would be maybe not quite as much as "app like" as ICARUS Terminal but maybe a hybrid between that and a website (e.g. so longer pages, with scrolling and regular webpage navigation) but still touch friendly and maybe with a fixed header for easy navigation (although one that uses less space than ICARUS Terminal does) might be a good way to go?

For now I guess interested in feedback on that, and on hearing how folks use it in case I'm missing common scenarios!

e.g. someone pointed out I'm missing the option to filter and display landing pad size (doh!), will include that when I add station information.
 
No single major update, but the web front end for Commodities and Systems is much improved, especially on mobile, and performance and data quality on ardent-industry.com is much better (API's has been zero maintenance and keeps working with zero downtime very nicely).

Station data is the last major missing functionality I want to add to the data, to round off the features for trading (e.g. so can see what size landing pads are at a station, and what state a system is in). Then maybe I'll add a search interface for route planning.

I'm interested in adding exploration data but EDSM does such a great job of that already (fast and reliable) that I may not do that too unless I want to start adding specific features (e.g. tracking lat/long locations of individual player submitted POIs, Plants, etc).
 
Migrated to new hardware platform

Yesterday I migrated everything behind https://ardent-industry.com to new hardware (and to a new provider in the process).

This happened without downtime and went from spinning up a new platform to fully migrating the service in an evening and was uneventful.

  • The CPU, RAM and storage capacity is significantly increased on the new service. Performance gains are x10.
  • Queries that took > 10 seconds are now sub-second. Queries that took seconds are now sub-millisecond.
  • The new service is less expensive than the old service. It's still co-located in the UK but is no longer on AWS Europe/London.

Context

The performance of the previous service was generally good, but relied heavily on diligent use of caching and request optimization to manage performance. There were still occasionally slow performing requests that could occasionally take a few seconds and I was limited in terms of options for optimising to mitigate this because of storage constraints (as a rule storage is cheap, but high performance storage is more expensive).

Critically, the indexes for all databases now fit entirely in RAM, which is a huge boost to performance, are the additional CPU cores.

The new platform relies less on service architecture. The initial implementation used AWS services for managing caching, backups, load balancing, failover and denial of service attacks. The new platform is simpler in terms of system design and is cheaper but the trade off is less fault tolerance and more centralised complexity in the system software. I believe it's worth that trade off for the performance gains in typical usage – for example the new platform is fast enough to not need any caching in front of data and so commodity prices are no longer subject to a delay of up to 5 minutes, although this makes it open to be easier to abuse. It was still possible to get similar performance and retain the benefits of the original platform, but then the trade off is cost (and it would be than I'm willing to commit to for a free service).

What's next

Over the last week or so I've been making small improvements to the information displayed and fixing bugs.

Now that the constrains I was working on are lifted, I'm going to start work on adding in station data and exposing options to filter results (e.g. include/exclude carriers, minimum supply/demand volumes, minimum/maximum pricing, etc) and to perform searches and multi-hop routes.

This should start to make the web based interface actually useful and help inform what might be missing from the Admin APIs.

Once some of the trade specific features are in I'll turn towards exploration.

Request for feedback from developers

The unique aspects to this project - that set it apart from INARA and from EDDB - is that it's open source and that it has a public API, so that it can be integrated into other software, just as EDDN is integrated into so many tools when it comes to sending data.

In that respect I'm hoping it plugs that gap for trade data, and potentially to expand upon what is already possible with the (excellent) EDSM API for exploration.

If you use the API in your software, please do give me a heads up as I am happy to accommodate avoiding breaking changes (and co-ordinating on potentially breaking changes, such as subtle changes in how requests are handled) but I don't know to do that if I don't know if they are in use. :)
 
Last edited:
This weekend I've fixed up some commodity behavior, added station data and a few endpoints I've not documented yet for getting it.

e.g. The API can now return a list of stations for a system, and information about where they are located and the services offered:


There are also endpoints to filter by type, if you are looking for a specific type of of station:


I'm still in the process of wiring it up to update data (like faction owner, system state, etc.) dynamically ... [ ] ... I've not integrated it into the UI or ICARUS Terminal yet but if folks want the raw data dumps they can down nightly SQLlite exports from here:

https://downloads.ardent-industry.com

This data set was created by combining data from EDSM with data from the last data dumps from EDDB and the latest data that comes in from EDDN. The market data took a few weeks to become useful and it might take a little bit to shake out some old / outdated info, I am still pretty confident about having filtering/sorting options in the API and UI by the end of the month.

I'm still undecided on if it want to try and also replicate data in EDSM and Spansh to provide a way to filter and sort on system bodies but am currently inclined to think no because of the cost and effort of storing the data and dealing with inevitable bugs and data quality issues, etc.

Update to above: I kept working on it a bit and actually station services, economy, location, etc. now do update automatically, so it's close to ready for wider use (once the bugs settle, which should be obvious looking at the data over the next few days). Data is augmented from different events to get additional information for each location - this is something that EDDB did but not all sites do but I think is neat and will likely do more of that.

I'm not yet storing system wide information (e.g. faction state, list of factions) but that is pretty straightforward at this point so that will probably be the last thing I do before I move on to making the it easier to access stuff via a UI.
 
Last edited:
Top Bottom