AppDoctor: proactive support (SaaS in development made with Elixir)

AppDoctor backend is built completely in elixir using all sorts of otp goodness.
Examples are authentication is using replicated ets tables, AppDoctor tests run in DynamicSupervisor genservers isolated from each other. We are really excited to be done(until changes are needed) with the backend and continue work on the front end for our 2019 launch. We will be moving users into closed beta shortly and I would love feedback from my favorite internet forum. Any questions on the elixir backend feel free to ask away!

5 Likes

Oh also feel free to email beta@appdoctor.io for when we let the next round of users into closed beta!

1 Like

Nice one Jordan :slight_smile:

I know it’s not live yet but I went to appdoctor.io and it says Request does not contain account subdomain …might be worth putting a holding page up for nosey parkers like myself? :lol:

You are probably correct. I will throw up something that redirects to the closed beta register page this weekend! But your more then welcome to poke at the api a bit :stuck_out_tongue:

If you had an account you would be able to do something like

google-com-ACCOUNTID.appdoctor.io and it would proxy requests to google.com

2 Likes

We are excited to start our closed beta!

Below are 10 beta codes people can use to check it out / give us feedback.

xqbkTkFW
5kv7ZAzF
6ubnpUNX
KX2ActlP
W6r7aOz8
VSsRAGEb
K4PI5q35
yOiTKvmH
2xdsdpkb
LLubEu85

https://app.appdoctor.io/register

Why are we doing a closed beta during development:

medium.com/appdoctor/closed-beta-af448039c3b7

Our public issue tracker:

Additional helpful information:

medium.com/appdoctor/appdoctor-search-e12a37a91523

medium.com/appdoctor/appdoctor-assertions-87d64d8874f9

If you come across any issues or have any feedback please post to the github issue tracker or email us at support@appdoctor.io

If you know anyone interested in the the perks that come with giving us feedback during our closed beta period please have them email beta@appdoctor.io

We will continue to update the codes after they have been used.

2 Likes

Post on what we are working towards with AppDoctor Tests:

https://medium.com/appdoctor/appdoctor-tests-f9325cb4e9e6

Tests suites run inside dynamically supervised genservers. That way we can have long running tests that share state in between steps!

AppDoctor StatusPages are now in closed beta. You can use any of the codes above to try it out(would love the feedback).

If you have a project or application that you need a live automated StatusPage give it a try.
(along with all the other things it does)

Take a look at our example status page that we use to check our own applications health!

https://status.appdoctor.io

Materialized views + ecto raw queries make for a very speedy experience even for the complex aggregations required for an AppDoctor Status Page.

Edit:
I also entered in a local startup competition and would really appreciate a vote!

https://5x5night.com/ideas/detail/appdoctor

Updated beta codes left!

xqbkTkFW
VSsRAGEb
K4PI5q35
yOiTKvmH
2xdsdpkb
LLubEu85

And of course to keep this elixir related here is a picture of a standard users supervisor tree in appdoctor.

59%20AM

under each user account:

Account GenServer: Used to collection some statistical information/ route request data to to the correct dynamic GenServer. This also handles starting bin servers under the bin supervisor.

Bin supervisor: This starts and stops GenServers for any request data and tracks statistical data like % of failed requests to an endpoint over X period of time. After not receiving any new messages after X time it stops itself.

Bin cleanup GenServer: handles rolling deletes based on account level. So for example free tier will allow 5000 requests per bin. It tracks this count internally and then runs the sql to delete when needed.

Rules GenServer: this GenServer gets passed requests and analyzes them against any rules stored it its state. It handles sending emails and updating the database when a rule is hit.

test GenServer: this is the place that contains all the tests state for a users. So that when a test is ran it does not need to hit the db. It also handles internal intervals of running tests using send_after.

test execution supervisor: when a test is running it can be long running so each test for an account is started in its own GenServer and handles each step of the test by sending messages to itself.

Last is a task supervisor that is used to start any async tasks and not have them crash the process they were started in.

AppDoctor uses a unique way of working distributed that has been working quite well so far and GenServers fail over across servers. I welcome any questions on the complications I went through setting this up and some of the awesome benefits gained through it as well!

2 Likes

Super excited to finally have the landing page up at:

https://appdoctor.io

Hopefully it explains everything better then I have previously. I will have some feature blog posts about the rules engine appdoctor uses because ast parsing made everything so much easier to handle!

2 Likes

We officially launched today!

https://appdoctor.io

I am super grateful for all the help I got both here and on the elixir slack group!

An honest look at launching a bootstrap startup

5 Likes

AppDoctor, a Grand Rapids, Michigan-based startup, was founded to solve common development issues in a cost-effective way

Grand Rapids Michigan is where I grew up! My family is always trying to pull be back. That’s awesome to see your startup based there. Congrats.

1 Like

It has been a while since I posted. I finally got around to doing a short demo of AppDoctor tests:

Also if you use the discount code ‘month-free’ when signing up you get 40$ applied to your account(only last till July)

Now for my funny elixir story:

Everything has gone really well since launch. No breaking bugs and everything has been running very smooth. Funny enough it turns out when you took a certain common action it crashed an account process every time(bad state format). I never even realized this was happening because the supervisor would restart the process and it would pull correct state format from the DB, so this bug went months unnoticed(since then I added better logging). Although it sucks to have a bug its great when everything continues to work correctly!(thanks elixir).

3 Likes

https://blog.appdoctor.io/may-feature-release/

Some interesting tidbits. We at AppDoctor use hot upgrades and since launch has not had a single second of downtime. We have Tests scheduled and running in GenServers that have been running since day 1 of release.

Doing hot upgrades during CI was a challenge in itself to figure out because we needed to pull the old artifact in order for distillery to figure out the update path to the new version. I will probably write a blog post going forward about our deployment strategy because it has so far worked out quite well for us and allows us to constantly deploy without dropping WebSocket connections or messing up test schedules.

3 Likes

Hey @jordiee, is it possible to use AppDoctor to do ui tests on a production site?

Do you have any intentions on open sourcing your app so we can see how certain bits of your app were implemented?

1 Like

I’d love to see your hot upgrade post! Thanks!

It is not currently possible to run browser checks via AppDoctor but it is on our backlog that we hope to complete this year!

AppDoctor can currently test any API use case as simple or complex as you need due to the robust rules engine. We plan on using the same rules engine when adding browser tests so you can expect the same robust level of customization to accommodate all use cases.

1 Like

I do not have any plans to open source the application in entirety. I do plan to opensource what I can though.

The user authentication portion is open sourced and I continue to support / develop that.

Keep a look out here for more open sourced parts of AppDoctor going forward.

2 Likes

Enjoying the blog, thanks for moving away from medium too :wink:

2 Likes