Show HN: Dashku - a real-time dashboard app, built with SocketStream
dashku.com
dashku.com
Error: ENOENT, no such file or directory '/root/apps/status/client/static/assets/main/1340976517230.html' at Object.openSync (fs.js:240:18) at Object.readFileSync (fs.js:128:15) at ServerResponse.<anonymous> (/root/apps/status/node_modules/socketstream/lib/client/http.js:34:26) at EventEmitter.<anonymous> (/root/apps/status/app.coffee:48:16) at EventEmitter.emit (/root/apps/status/node_modules/socketstream/node_modules/eventemitter2/lib/eventemitter2.js:319:22) at Router.route (/root/apps/status/node_modules/socketstream/lib/http/router.js:18:15) at Object.handle (/root/apps/status/node_modules/socketstream/lib/http/index.js:96:54) at next (/root/apps/status/node_modules/socketstream/node_modules/connect/lib/proto.js:190:15) at /root/apps/status/node_modules/socketstream/node_modules/connect/lib/middleware/session.js:299:9 at /root/apps/status/node_modules/socketstream/node_modules/connect/lib/middleware/session.js:322:9
At least this confirms that it's actually running socketstream...
EDIT: For the record - I still follow this practice, I'm just debating it's relevance these days. Things change, right?
As the creator of SocketStream, I am very keen to know how this error occurred. I believe it relates to the ulimit issue Paul mentioned in another comment which was fixed some time ago (i.e. the file was there, but the user was out of file descriptors)... not sure yet. Either way, we need to catch the exception properly.
As a general tip to all those hosting a Node app in production, you can catch uncaught exceptions with:
process.on('uncaughtException', function(err) { console.log(err); });
This ensures anything which goes wrong unexpectedly will be logged to your console, rather than sent to the browser - not good!
SocketStream doesn't currently do this for you by default, but maybe it should (in production mode). It's something I will consider implementing in the near future.
So far my focus has been on creating a great dev environment. It's very encouraging to see Dashku stand up to thousands of simultaneous users (once the ulimit issue was fixed), but I'm the first to admit more work is needed to ensure SocketStream is rock solid in production. It will take time but, thanks in part to experiences like today's, we'll get there.
Great job Paul.
Owen
My apologies, I didn't expect to end up Top of HN. I'll try and get it back up.
In the meantime, here is the YouTube video: http://www.youtube.com/watch?v=cxf8f9AQBgM&feature=plcp
I'm also curious if there's an easy code import/export feature for individual widgets and/or the entire dashboard (all widgets, global styling, settings, etc). I don't think I'd use it for anything serious without being able to export the entire dashboard page and add it to my git repo (and being able to reload it if somethings gets lost or messed up). And being able to import/export individual widgets would make it easy for the community to share custom widgets so that in practice end users wouldn't actually have to write much code.
Anyway, it looks like a cool project!
EDIT: I see now there are REST api endpoints for creating & getting a dashboard, awesome.
Once again, my apologies for the downtime.
For some reason, this was the case:
$ ulimit -n
> 1024
I thought I had set the ulimit to unlimited, but that wasn't so.The site is alive, but may still be intermittent. Will keep you updated.
Fantastic site, by the way.
but.
In general terms - what does a potential user of this service conclude if the server appears to be hosted on a single machine and the admin staff doesn't seem to know how ulimit works?
(Yes, I realize this is ycombinator and about ideas and VC and all that.... just throwing the concept out there.)
Great product, but total lack of either understanding or preparedness on the lower levels.
It was unfortunate that this ulimit issue occurred and I apologise for that.
I knew about ulimit from 2 sources (a LinkedIn article on Node.js practices) and a 2nd source from a hosting service's documentation.
The fault (and it was mine) was that I didn't realise that in order to persist the ulimit setting between reboots, you had to set it in a configuration file.
Originally, the application was hosted across multiple instances and proxied, but due to the nature of the WebSocket library and it's use of transports with the proxy library, the connection was intermittent, so I reverted to a single instance. Since resolving the ulimit issue, this application has stayed up.
As for admin staff, you may be surprised to learn there is no company with multiple devs, designers, product people and sysadmin behind all this. This is all my work, all 2 and a bit months of it.
I mean, it's neat (understatement of the week) and all; but where do you plan on going from here?
Thanks. At this point, I need to go and find some work as my bank balance doesn't look great.
I'm going to continue working on it in some capacity, and I will investigate turning it into a SaaS.
There are some components of the app which would be worth open-sourcing, in order to assist others with building SocketStream applications.
Thanks again.
Good luck with your other gigs as well.
That said - building websites to handle load has no magic bullet. Sure, nginx is good. Far-future expires headers and cache-busting schemes to go with it are good too. CDN's are good. Varnish is good. Clusters are great too, for capacity and redundancy, but you need to be aware of stuff in all these cases, and every layer you add is also something else to manage and something else to break..... so really it has to come from test-driven results regarldess, so you are spot on.
My beef with services like this (granted I haven't investigated fully) is I don't want hosted stuff. I get that's a huge market, but for confidentiality and other reasons, there is also a market for slightly more traditional stuff.
I'd love a toolkit to make it easy to build arbitrary animated control panel-y things a-la Quest Spotlight on <whatever> for my apps... havent' found it yet, anyone know one?
# Increase File Descriptor limits.
export FILEMAX=`sysctl -n fs.file-max`
sudo mv /etc/security/limits.conf /etc/security/limits.conf.bak
sudo touch /etc/security/limits.conf
sudo chmod 666 /etc/security/limits.conf
echo "root soft nofile $FILEMAX" >> /etc/security/limits.conf
echo "root hard nofile $FILEMAX" >> /etc/security/limits.conf
echo "* soft nofile $FILEMAX" >> /etc/security/limits.conf
echo "* hard nofile $FILEMAX" >> /etc/security/limits.conf
sudo chmod 644 /etc/security/limits.conf
touch /home/ubuntu/.bash_profile
echo "ulimit -n $FILEMAX" >> /home/ubuntu/.bash_profile
# Increase Ephemeral Ports.
sudo chmod 666 /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
sudo chmod 644 /etc/sysctl.confOn the other hand, when I take a close look at something like what you just posted, the level of control is hard to argue with - nothing wrong with that.
The temptation is still to basically do what you did (thanks BTW) and just revert everything back to what it rightfully should be.... it served us just fine for ages.
Or I'll switch to FreeBSD ,unless they're doing the same thing.
Otherwise looks good.
One issue: I tried to sign up using Chrome 20 (Windows 7) and the dialog that appears is below the video in the Z-order.
But I absolutely hear your suggestion that website needs lot of work.
Because of the lack of a decent dashboard solution, we've been running our own. We absolutely wanted to use D3 and we wanted to have multiple, toggleable pages.
This might just do the trick.
For the beta, yes, which should last a couple of months. I will investigate turning it into a SaaS, but for now I will go and find some work.
Small nitpick: why do I need to give myself a username when signing up?
Chrome 20 on Ubuntu 12.04.
30 minutes to bring back a homepage is pretty bad man, also your personal homepage http://paulbjensen.co.uk is returning NO CONTENT, is that on the same (bricked) server?
Apologies for the downtime.
It turns out ulimit was set to 1024 when I thought I'd configured it to unlimited.
As for paulbjensen.co.uk, I removed that site about 3 months ago but didn't remove the link to it in HN. As for your question about the same bricked server, the answer is no, I run Dashku on a different server to the server that was hosting paulbjensen.co.uk.
why not create a kickstarter project and raise enough money so you can open source the code? i would definitely contribute!