New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

control

Package Overview
Dependencies
Maintainers
0
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

control - npm Package Compare versions

Comparing version
0.2.0
to
0.2.1
+738
example/control.log
20110712202146:localhost:tsmith:ssh: date
20110712202147:localhost:stdout: Tue Jul 12 20:21:47 UTC 2011
20110712202147:localhost:exit: 0
20110712202225:localhost:tsmith:ssh: date
20110712202225:localhost:stdout: Tue Jul 12 20:22:25 UTC 2011
20110712202225:localhost:exit: 0
20110712202256:localhost:tsmith:ssh: date
20110712202257:localhost:stdout: Tue Jul 12 20:22:57 UTC 2011
20110712202257:localhost:exit: 0
20110712202326:localhost:tsmith:ssh: date
20110712202326:localhost:stdout: Tue Jul 12 20:23:26 UTC 2011
20110712202326:localhost:exit: 0
20110712202418:localhost:tsmith:ssh: date
20110712202419:localhost:stdout: Tue Jul 12 20:24:19 UTC 2011
20110712202419:localhost:exit: 0
20110712202427:localhost:tsmith:ssh: date
20110712202427:localhost:stdout: Tue Jul 12 20:24:27 UTC 2011
20110712202427:localhost:exit: 0
20110712202558:localhost:tsmith:ssh: date
20110712202559:localhost:stdout: Tue Jul 12 20:25:59 UTC 2011
20110712202559:localhost:exit: 0
20110712202605:localhost:tsmith:ssh: date
20110712202605:localhost:stdout: Tue Jul 12 20:26:05 UTC 2011
20110712202605:localhost:exit: 0
20110712202634:localhost:tsmith:ssh: date
20110712202634:localhost:stdout: Tue Jul 12 20:26:34 UTC 2011
20110712202634:localhost:exit: 0
20110712203602:localhost:tsmith:ssh: date
20110712203602:localhost:stdout: Tue Jul 12 20:36:02 UTC 2011
20110712203602:localhost:exit: 0
20110712203622:localhost:tsmith:ssh: date
20110712203623:localhost:stdout: Tue Jul 12 20:36:23 UTC 2011
20110712203623:localhost:exit: 0
20110712203644:localhost:tsmith:ssh: date
20110712203645:localhost:stdout: Tue Jul 12 20:36:45 UTC 2011
20110712203645:localhost:exit: 0
20110712203730:localhost:tsmith:ssh: date
20110712203730:localhost:stdout: Tue Jul 12 20:37:30 UTC 2011
20110712203730:localhost:exit: 0
20110712203742:localhost:tsmith:ssh: date
20110712203742:localhost:stdout: Tue Jul 12 20:37:42 UTC 2011
20110712203742:localhost:exit: 0
20110712203751:localhost:tsmith:ssh: date
20110712203751:127.0.0.1:tsmith:ssh: date
20110712203751:localhost:stdout: Tue Jul 12 20:37:51 UTC 2011
20110712203751:localhost:exit: 0
20110712203751:127.0.0.1:stdout: Tue Jul 12 20:37:51 UTC 2011
20110712203751:127.0.0.1:exit: 0
20110712204016:localhost:tsmith:ssh: date
20110712204016:127.0.0.1:tsmith:ssh: date
20110712204016:localhost:stdout: Tue Jul 12 20:40:16 UTC 2011
20110712204016:127.0.0.1:stdout: Tue Jul 12 20:40:16 UTC 2011
20110712204016:localhost:exit: 0
20110712204016:localhost:tsmith:ssh: date
20110712204016:127.0.0.1:exit: 0
20110712204016:127.0.0.1:tsmith:ssh: date
20110712204017:localhost:stdout: Tue Jul 12 20:40:17 UTC 2011
20110712204017:localhost:exit: 0
20110712204017:127.0.0.1:stdout: Tue Jul 12 20:40:17 UTC 2011
20110712204017:127.0.0.1:exit: 0
20110712204036:localhost:tsmith:ssh: date
20110712204036:127.0.0.1:tsmith:ssh: date
20110712204037:localhost:stdout: Tue Jul 12 20:40:37 UTC 2011
20110712204037:localhost:exit: 0
20110712204037:localhost:tsmith:ssh: date
20110712204037:127.0.0.1:stdout: Tue Jul 12 20:40:37 UTC 2011
20110712204037:127.0.0.1:exit: 0
20110712204037:127.0.0.1:tsmith:ssh: date
20110712204037:localhost:stdout: Tue Jul 12 20:40:37 UTC 2011
20110712204037:127.0.0.1:stdout: Tue Jul 12 20:40:37 UTC 2011
20110712204037:127.0.0.1:exit: 0
20110712204037:localhost:exit: 0
20110712204619:localhost:tsmith:ssh: date
20110712204619:127.0.0.1:tsmith:ssh: date
20110712204619:localhost:stdout: Tue Jul 12 20:46:19 UTC 2011
20110712204619:localhost:exit: 0
20110712204619:localhost:tsmith:ssh: date
20110712204619:127.0.0.1:stdout: Tue Jul 12 20:46:19 UTC 2011
20110712204619:127.0.0.1:exit: 0
20110712204619:127.0.0.1:tsmith:ssh: date
20110712204619:localhost:stdout: Tue Jul 12 20:46:19 UTC 2011
20110712204619:localhost:exit: 0
20110712204619:127.0.0.1:stdout: Tue Jul 12 20:46:19 UTC 2011
20110712204619:127.0.0.1:exit: 0
20110712204736:localhost:tsmith:ssh: date
20110712204736:127.0.0.1:tsmith:ssh: date
20110712204737:localhost:stdout: Tue Jul 12 20:47:37 UTC 2011
20110712204737:127.0.0.1:stdout: Tue Jul 12 20:47:37 UTC 2011
20110712204737:localhost:exit: 0
20110712204737:localhost:tsmith:ssh: date
20110712204737:127.0.0.1:exit: 0
20110712204737:127.0.0.1:tsmith:ssh: date
20110712204737:localhost:stdout: Tue Jul 12 20:47:37 UTC 2011
20110712204737:localhost:exit: 0
20110712204737:127.0.0.1:stdout: Tue Jul 12 20:47:37 UTC 2011
20110712204737:127.0.0.1:exit: 0
20110712205141:localhost:tsmith:ssh: date
20110712205141:127.0.0.1:tsmith:ssh: date
20110712205141:localhost:stdout: Tue Jul 12 20:51:41 UTC 2011
20110712205141:127.0.0.1:stdout: Tue Jul 12 20:51:41 UTC 2011
20110712205141:localhost:exit: 0
20110712205141:localhost:tsmith:ssh: date
20110712205141:127.0.0.1:exit: 0
20110712205141:127.0.0.1:tsmith:ssh: date
20110712205141:localhost:stdout: Tue Jul 12 20:51:41 UTC 2011
20110712205141:localhost:exit: 0
20110712205141:127.0.0.1:stdout: Tue Jul 12 20:51:41 UTC 2011
20110712205141:127.0.0.1:exit: 0
20110712205152:localhost:tsmith:ssh: date
20110712205152:127.0.0.1:tsmith:ssh: date
20110712205153:localhost:stdout: Tue Jul 12 20:51:53 UTC 2011
20110712205153:127.0.0.1:stdout: Tue Jul 12 20:51:53 UTC 2011
20110712205153:localhost:exit: 0
20110712205153:localhost:tsmith:ssh: date
20110712205153:127.0.0.1:exit: 0
20110712205153:127.0.0.1:tsmith:ssh: date
20110712205153:localhost:stdout: Tue Jul 12 20:51:53 UTC 2011
20110712205153:localhost:exit: 0
20110712205153:127.0.0.1:stdout: Tue Jul 12 20:51:53 UTC 2011
20110712205153:127.0.0.1:exit: 0
20110712210056:localhost:tsmith:ssh: date
20110712210056:127.0.0.1:tsmith:ssh: date
20110712210057:localhost:stdout: Tue Jul 12 21:00:57 UTC 2011
20110712210057:localhost:exit: 0
20110712210057:localhost:tsmith:ssh: date
20110712210057:127.0.0.1:stdout: Tue Jul 12 21:00:57 UTC 2011
20110712210057:127.0.0.1:exit: 0
20110712210057:127.0.0.1:tsmith:ssh: date
20110712210057:localhost:stdout: Tue Jul 12 21:00:57 UTC 2011
20110712210057:localhost:exit: 0
20110712210057:127.0.0.1:stdout: Tue Jul 12 21:00:57 UTC 2011
20110712210057:127.0.0.1:exit: 0
20110712210308:localhost:tsmith:ssh: date
20110712210308:127.0.0.1:tsmith:ssh: date
20110712210308:localhost:stdout: Tue Jul 12 21:03:08 UTC 2011
20110712210308:localhost:exit: 0
20110712210308:localhost:tsmith:ssh: date
20110712210308:127.0.0.1:stdout: Tue Jul 12 21:03:08 UTC 2011
20110712210308:127.0.0.1:exit: 0
20110712210308:127.0.0.1:tsmith:ssh: date
20110712210308:localhost:stdout: Tue Jul 12 21:03:08 UTC 2011
20110712210308:localhost:exit: 0
20110712210308:127.0.0.1:stdout: Tue Jul 12 21:03:08 UTC 2011
20110712210308:127.0.0.1:exit: 0
20110712210329:localhost:tsmith:ssh: date
20110712210329:127.0.0.1:tsmith:ssh: date
20110712210329:localhost:stdout: Tue Jul 12 21:03:29 UTC 2011
20110712210329:localhost:exit: 0
20110712210329:localhost:tsmith:ssh: date
20110712210329:127.0.0.1:stdout: Tue Jul 12 21:03:29 UTC 2011
20110712210329:127.0.0.1:exit: 0
20110712210329:127.0.0.1:tsmith:ssh: date
20110712210329:localhost:stdout: Tue Jul 12 21:03:29 UTC 2011
20110712210329:localhost:exit: 0
20110712210329:127.0.0.1:stdout: Tue Jul 12 21:03:29 UTC 2011
20110712210329:127.0.0.1:exit: 0
20110712210346:localhost:tsmith:ssh: date
20110712210346:127.0.0.1:tsmith:ssh: date
20110712210346:localhost:stdout: Tue Jul 12 21:03:46 UTC 2011
20110712210346:localhost:exit: 0
20110712210346:localhost:tsmith:ssh: date
20110712210346:127.0.0.1:stdout: Tue Jul 12 21:03:46 UTC 2011
20110712210346:127.0.0.1:exit: 0
20110712210346:127.0.0.1:tsmith:ssh: date
20110712210346:localhost:stdout: Tue Jul 12 21:03:46 UTC 2011
20110712210346:localhost:exit: 0
20110712210347:127.0.0.1:stdout: Tue Jul 12 21:03:47 UTC 2011
20110712210347:127.0.0.1:exit: 0
20110712210405:localhost:tsmith:ssh: date
20110712210406:127.0.0.1:tsmith:ssh: date
20110712210406:localhost:stdout: Tue Jul 12 21:04:06 UTC 2011
20110712210406:localhost:exit: 0
20110712210406:localhost:tsmith:ssh: date
20110712210406:127.0.0.1:stdout: Tue Jul 12 21:04:06 UTC 2011
20110712210406:127.0.0.1:exit: 0
20110712210406:127.0.0.1:tsmith:ssh: date
20110712210406:localhost:stdout: Tue Jul 12 21:04:06 UTC 2011
20110712210406:localhost:exit: 0
20110712210406:127.0.0.1:stdout: Tue Jul 12 21:04:06 UTC 2011
20110712210406:127.0.0.1:exit: 0
20110712210421:localhost:tsmith:ssh: date
20110712210421:127.0.0.1:tsmith:ssh: date
20110712210421:localhost:stdout: Tue Jul 12 21:04:21 UTC 2011
20110712210421:localhost:exit: 0
20110712210421:localhost:tsmith:ssh: date
20110712210422:127.0.0.1:stdout: Tue Jul 12 21:04:21 UTC 2011
20110712210422:127.0.0.1:exit: 0
20110712210422:127.0.0.1:tsmith:ssh: date
20110712210422:localhost:stdout: Tue Jul 12 21:04:22 UTC 2011
20110712210422:localhost:exit: 0
20110712210422:127.0.0.1:stdout: Tue Jul 12 21:04:22 UTC 2011
20110712210422:127.0.0.1:exit: 0
20110712210459:localhost:tsmith:ssh: date
20110712210459:127.0.0.1:tsmith:ssh: date
20110712210500:localhost:stdout: Tue Jul 12 21:05:00 UTC 2011
20110712210500:localhost:exit: 0
20110712210500:localhost:tsmith:ssh: date
20110712210500:127.0.0.1:stdout: Tue Jul 12 21:05:00 UTC 2011
20110712210500:127.0.0.1:exit: 0
20110712210500:127.0.0.1:tsmith:ssh: date
20110712210500:localhost:stdout: Tue Jul 12 21:05:00 UTC 2011
20110712210500:localhost:exit: 0
20110712210500:127.0.0.1:stdout: Tue Jul 12 21:05:00 UTC 2011
20110712210500:127.0.0.1:exit: 0
20110712210506:localhost:tsmith:ssh: date
20110712210506:127.0.0.1:tsmith:ssh: date
20110712210506:localhost:stdout: Tue Jul 12 21:05:06 UTC 2011
20110712210506:localhost:exit: 0
20110712210506:localhost:tsmith:ssh: date
20110712210506:127.0.0.1:stdout: Tue Jul 12 21:05:06 UTC 2011
20110712210506:127.0.0.1:exit: 0
20110712210506:127.0.0.1:tsmith:ssh: date
20110712210507:localhost:stdout: Tue Jul 12 21:05:07 UTC 2011
20110712210507:localhost:exit: 0
20110712210507:127.0.0.1:stdout: Tue Jul 12 21:05:07 UTC 2011
20110712210507:127.0.0.1:exit: 0
20110712210538:localhost:tsmith:ssh: date
20110712210538:127.0.0.1:tsmith:ssh: date
20110712210539:localhost:stdout: Tue Jul 12 21:05:39 UTC 2011
20110712210539:127.0.0.1:stdout: Tue Jul 12 21:05:39 UTC 2011
20110712210539:localhost:exit: 0
20110712210539:localhost:tsmith:ssh: date
20110712210539:127.0.0.1:exit: 0
20110712210539:127.0.0.1:tsmith:ssh: date
20110712210539:localhost:stdout: Tue Jul 12 21:05:39 UTC 2011
20110712210539:localhost:exit: 0
20110712210539:127.0.0.1:stdout: Tue Jul 12 21:05:39 UTC 2011
20110712210539:127.0.0.1:exit: 0
20110712210636:localhost:tsmith:ssh: date
20110712210636:127.0.0.1:tsmith:ssh: date
20110712210636:localhost:stdout: Tue Jul 12 21:06:36 UTC 2011
20110712210636:localhost:exit: 0
20110712210636:localhost:tsmith:ssh: date
20110712210636:127.0.0.1:stdout: Tue Jul 12 21:06:36 UTC 2011
20110712210636:127.0.0.1:exit: 0
20110712210636:127.0.0.1:tsmith:ssh: date
20110712210636:localhost:stdout: Tue Jul 12 21:06:36 UTC 2011
20110712210636:localhost:exit: 0
20110712210636:127.0.0.1:stdout: Tue Jul 12 21:06:36 UTC 2011
20110712210636:127.0.0.1:exit: 0
20110712210823:localhost:tsmith:ssh: date
20110712210823:127.0.0.1:tsmith:ssh: date
20110712210823:localhost:stdout: Tue Jul 12 21:08:23 UTC 2011
20110712210823:localhost:exit: 0
20110712210823:localhost:tsmith:ssh: date
20110712210823:127.0.0.1:stdout: Tue Jul 12 21:08:23 UTC 2011
20110712210823:127.0.0.1:exit: 0
20110712210823:127.0.0.1:tsmith:ssh: date
20110712210823:localhost:stdout: Tue Jul 12 21:08:23 UTC 2011
20110712210823:localhost:exit: 0
20110712210823:127.0.0.1:stdout: Tue Jul 12 21:08:23 UTC 2011
20110712210823:127.0.0.1:exit: 0
20110712211144:localhost:tsmith:ssh: date
20110712211144:127.0.0.1:tsmith:ssh: date
20110712211144:localhost:stdout: Tue Jul 12 21:11:44 UTC 2011
20110712211144:localhost:exit: 0
20110712211144:localhost:tsmith:ssh: date
20110712211144:127.0.0.1:stdout: Tue Jul 12 21:11:44 UTC 2011
20110712211144:127.0.0.1:exit: 0
20110712211144:127.0.0.1:tsmith:ssh: date
20110712211144:localhost:stdout: Tue Jul 12 21:11:44 UTC 2011
20110712211144:localhost:exit: 0
20110712211145:127.0.0.1:stdout: Tue Jul 12 21:11:45 UTC 2011
20110712211145:127.0.0.1:exit: 0
20110712211202:localhost:tsmith:ssh: date
20110712211202:127.0.0.1:tsmith:ssh: date
20110712211203:localhost:stdout: Tue Jul 12 21:12:03 UTC 2011
20110712211203:localhost:exit: 0
20110712211203:localhost:tsmith:ssh: date
20110712211203:127.0.0.1:stdout: Tue Jul 12 21:12:03 UTC 2011
20110712211203:127.0.0.1:exit: 0
20110712211203:127.0.0.1:tsmith:ssh: date
20110712211203:localhost:stdout: Tue Jul 12 21:12:03 UTC 2011
20110712211203:localhost:exit: 0
20110712211203:127.0.0.1:stdout: Tue Jul 12 21:12:03 UTC 2011
20110712211203:127.0.0.1:exit: 0
20110712211339:localhost:tsmith:ssh: date
20110712211339:127.0.0.1:tsmith:ssh: date
20110712211339:localhost:stdout: Tue Jul 12 21:13:39 UTC 2011
20110712211339:localhost:exit: 0
20110712211339:localhost:tsmith:ssh: date
20110712211339:127.0.0.1:stdout: Tue Jul 12 21:13:39 UTC 2011
20110712211339:127.0.0.1:exit: 0
20110712211339:127.0.0.1:tsmith:ssh: date
20110712211340:localhost:stdout: Tue Jul 12 21:13:40 UTC 2011
20110712211340:127.0.0.1:stdout: Tue Jul 12 21:13:40 UTC 2011
20110712211340:127.0.0.1:exit: 0
20110712211340:localhost:exit: 0
20110712211356:localhost:tsmith:ssh: date
20110712211356:127.0.0.1:tsmith:ssh: date
20110712211356:localhost:stdout: Tue Jul 12 21:13:56 UTC 2011
20110712211356:127.0.0.1:stdout: Tue Jul 12 21:13:56 UTC 2011
20110712211356:localhost:exit: 0
20110712211356:localhost:tsmith:ssh: date
20110712211356:127.0.0.1:exit: 0
20110712211356:127.0.0.1:tsmith:ssh: date
20110712211356:localhost:stdout: Tue Jul 12 21:13:56 UTC 2011
20110712211356:localhost:exit: 0
20110712211356:127.0.0.1:stdout: Tue Jul 12 21:13:56 UTC 2011
20110712211356:127.0.0.1:exit: 0
20110712211449:localhost:tsmith:ssh: date
20110712211449:127.0.0.1:tsmith:ssh: date
20110712211449:localhost:stdout: Tue Jul 12 21:14:49 UTC 2011
20110712211449:localhost:exit: 0
20110712211449:localhost:tsmith:ssh: date
20110712211449:127.0.0.1:stdout: Tue Jul 12 21:14:49 UTC 2011
20110712211449:127.0.0.1:exit: 0
20110712211449:127.0.0.1:tsmith:ssh: date
20110712211450:localhost:stdout: Tue Jul 12 21:14:50 UTC 2011
20110712211450:localhost:exit: 0
20110712211450:127.0.0.1:stdout: Tue Jul 12 21:14:50 UTC 2011
20110712211450:127.0.0.1:exit: 0
20110712211606:localhost:tsmith:ssh: date
20110712211606:127.0.0.1:tsmith:ssh: date
20110712211606:localhost:stdout: Tue Jul 12 21:16:06 UTC 2011
20110712211606:localhost:exit: 0
20110712211606:localhost:tsmith:ssh: date
20110712211606:127.0.0.1:stdout: Tue Jul 12 21:16:06 UTC 2011
20110712211606:127.0.0.1:exit: 0
20110712211606:127.0.0.1:tsmith:ssh: date
20110712211606:localhost:stdout: Tue Jul 12 21:16:06 UTC 2011
20110712211606:localhost:exit: 0
20110712211606:127.0.0.1:stdout: Tue Jul 12 21:16:06 UTC 2011
20110712211606:127.0.0.1:exit: 0
20110712211615:localhost:tsmith:ssh: date
20110712211615:127.0.0.1:tsmith:ssh: date
20110712211615:localhost:stdout: Tue Jul 12 21:16:15 UTC 2011
20110712211615:localhost:exit: 0
20110712211615:localhost:tsmith:ssh: date
20110712211616:127.0.0.1:stdout: Tue Jul 12 21:16:15 UTC 2011
20110712211616:127.0.0.1:exit: 0
20110712211616:127.0.0.1:tsmith:ssh: date
20110712211616:localhost:stdout: Tue Jul 12 21:16:16 UTC 2011
20110712211616:localhost:exit: 0
20110712211616:127.0.0.1:stdout: Tue Jul 12 21:16:16 UTC 2011
20110712211616:127.0.0.1:exit: 0
20110712211845:localhost:tsmith:ssh: date
20110712211845:127.0.0.1:tsmith:ssh: date
20110712211846:localhost:stdout: Tue Jul 12 21:18:46 UTC 2011
20110712211846:localhost:exit: 0
20110712211846:localhost:tsmith:ssh: date
20110712211846:127.0.0.1:stdout: Tue Jul 12 21:18:46 UTC 2011
20110712211846:127.0.0.1:exit: 0
20110712211846:127.0.0.1:tsmith:ssh: date
20110712211846:localhost:stdout: Tue Jul 12 21:18:46 UTC 2011
20110712211846:localhost:exit: 0
20110712211846:127.0.0.1:stdout: Tue Jul 12 21:18:46 UTC 2011
20110712211846:127.0.0.1:exit: 0
20110712212512:localhost:tsmith:ssh: date
20110712212512:127.0.0.1:tsmith:ssh: date
20110712212512:localhost:stdout: Tue Jul 12 21:25:12 UTC 2011
20110712212512:localhost:exit: 0
20110712212512:localhost:tsmith:ssh: date
20110712212512:127.0.0.1:stdout: Tue Jul 12 21:25:12 UTC 2011
20110712212512:127.0.0.1:exit: 0
20110712212512:127.0.0.1:tsmith:ssh: date
20110712212513:localhost:stdout: Tue Jul 12 21:25:13 UTC 2011
20110712212513:localhost:exit: 0
20110712212513:127.0.0.1:stdout: Tue Jul 12 21:25:13 UTC 2011
20110712212513:127.0.0.1:exit: 0
20110713010210:localhost:tsmith:ssh: date
20110713010210:127.0.0.1:tsmith:ssh: date
20110713010210:localhost:stdout: Wed Jul 13 01:02:10 UTC 2011
20110713010210:127.0.0.1:stdout: Wed Jul 13 01:02:10 UTC 2011
20110713010210:localhost:exit: 0
20110713010210:localhost:tsmith:ssh: date
20110713010210:127.0.0.1:exit: 0
20110713010210:127.0.0.1:tsmith:ssh: date
20110713010211:localhost:stdout: Wed Jul 13 01:02:11 UTC 2011
20110713010211:localhost:exit: 0
20110713010211:127.0.0.1:stdout: Wed Jul 13 01:02:11 UTC 2011
20110713010211:127.0.0.1:exit: 0
20110713010224:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/streamables.js mycluster arbexit 0
20110713010224:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/streamables.js mycluster arbexit 0
20110713010224:127.0.0.1:stdout: Performing mycluster
20110713010224:127.0.0.1:stdout: Performing arbexit for localhost
20110713010224:127.0.0.1:stdout: (stdout) Exiting with code 0
20110713010224:127.0.0.1:stderr: (stderr) Exiting with code 0
20110713010224:127.0.0.1:exit: 0
20110713010225:localhost:stdout: Performing mycluster
20110713010225:localhost:stdout: Performing arbexit for localhost
20110713010225:localhost:stdout: (stdout) Exiting with code 0
20110713010225:localhost:stderr: (stderr) Exiting with code 0
20110713010225:localhost:exit: 0
20110713010730:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010731:localhost:stdout: Performing mycluster
20110713010731:localhost:stdout: Performing arbexit for localhost
20110713010731:localhost:stdout: (stdout) Exiting with code 0
20110713010731:localhost:stderr: (stderr) Exiting with code 0
20110713010731:localhost:exit: 0
20110713010731:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010731:localhost:stdout: Performing mycluster
20110713010731:localhost:stdout: Performing arbexit for localhost
20110713010731:localhost:stdout: (stdout) Exiting with code 0
20110713010731:localhost:stderr: (stderr) Exiting with code 0
20110713010731:localhost:exit: 0
20110713010749:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010749:localhost:stdout: Performing mycluster
20110713010749:localhost:stdout: Performing arbexit for localhost
20110713010749:localhost:stdout: (stdout) Exiting with code 0
20110713010749:localhost:stderr: (stderr) Exiting with code 0
20110713010749:localhost:exit: 0
20110713010749:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010750:localhost:stdout: Performing mycluster
20110713010750:localhost:stdout: Performing arbexit for localhost
20110713010750:localhost:stdout: (stdout) Exiting with code 0
20110713010750:localhost:stderr: (stderr) Exiting with code 0
20110713010750:localhost:exit: 0
20110713010808:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010809:localhost:stdout: Performing mycluster
20110713010809:localhost:stdout: Performing arbexit for localhost
20110713010809:localhost:stdout: (stdout) Exiting with code 0
20110713010809:localhost:stderr: (stderr) Exiting with code 0
20110713010809:localhost:exit: 0
20110713010809:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010809:localhost:stdout: Performing mycluster
20110713010809:localhost:stdout: Performing arbexit for localhost
20110713010809:localhost:stdout: (stdout) Exiting with code 0
20110713010809:localhost:stderr: (stderr) Exiting with code 0
20110713010809:localhost:exit: 0
20110713010855:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010855:localhost:stdout: Performing mycluster
20110713010855:localhost:stdout: Performing arbexit for localhost
20110713010855:localhost:stdout: (stdout) Exiting with code 0
20110713010855:localhost:stderr: (stderr) Exiting with code 0
20110713010856:localhost:exit: 0
20110713010856:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713010856:localhost:stdout: Performing mycluster
20110713010856:localhost:stdout: Performing arbexit for localhost
20110713010856:localhost:stdout: (stdout) Exiting with code 0
20110713010856:localhost:stderr: (stderr) Exiting with code 0
20110713010856:localhost:exit: 0
20110713011142:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011142:localhost:stdout: Performing mycluster
20110713011142:localhost:stdout: Performing arbexit for localhost
20110713011142:localhost:stdout: (stdout) Exiting with code 0
20110713011142:localhost:stderr: (stderr) Exiting with code 0
20110713011142:localhost:exit: 0
20110713011142:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011143:localhost:stdout: Performing mycluster
20110713011143:localhost:stdout: Performing arbexit for localhost
20110713011143:localhost:stdout: (stdout) Exiting with code 0
20110713011143:localhost:stderr: (stderr) Exiting with code 0
20110713011143:localhost:exit: 0
20110713011239:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011239:localhost:stdout: Performing mycluster
20110713011239:localhost:stdout: Performing arbexit for localhost
20110713011239:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011239:localhost:stderr: (stderr) Exiting with code 0
20110713011239:localhost:exit: 0
20110713011239:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011239:localhost:stdout: Performing mycluster
20110713011239:localhost:stdout: Performing arbexit for localhost
20110713011239:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011239:localhost:stderr: (stderr) Exiting with code 0
20110713011239:localhost:exit: 0
20110713011315:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011316:localhost:stdout: Performing mycluster
20110713011316:localhost:stdout: Performing arbexit for localhost
20110713011316:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011316:localhost:stderr: (stderr) Exiting with code 0
20110713011316:localhost:exit: 0
20110713011324:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011324:localhost:stdout: Performing mycluster
20110713011324:localhost:stdout: Performing arbexit for localhost
20110713011324:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011324:localhost:stderr: (stderr) Exiting with code 0
20110713011324:localhost:exit: 0
20110713011331:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011331:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011332:127.0.0.1:stdout: Performing mycluster
20110713011332:localhost:stdout: Performing mycluster
20110713011332:127.0.0.1:stdout: Performing arbexit for localhost
20110713011332:localhost:stdout: Performing arbexit for localhost
20110713011332:127.0.0.1:stdout: (stdout) localhost Exiting with code 0
20110713011332:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011332:127.0.0.1:stderr: (stderr) Exiting with code 0
20110713011332:localhost:stderr: (stderr) Exiting with code 0
20110713011332:localhost:exit: 0
20110713011332:127.0.0.1:exit: 0
20110713011340:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0
20110713011340:localhost:stdout: Performing mycluster
20110713011340:localhost:stdout: Performing arbexit for localhost
20110713011340:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011340:localhost:stderr: (stderr) Exiting with code 0
20110713011340:localhost:exit: 0
20110713011424:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011425:localhost:stdout: Performing myhost
20110713011425:localhost:stdout: Performing arbexit for localhost
20110713011425:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011425:localhost:stderr: (stderr) Exiting with code 0
20110713011425:localhost:exit: 0
20110713011432:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011433:localhost:stdout: Performing myhost
20110713011433:localhost:stdout: Performing arbexit for localhost
20110713011433:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011433:localhost:stderr: (stderr) Exiting with code 0
20110713011433:localhost:exit: 0
20110713011454:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011454:localhost:stdout: Performing myhost
20110713011454:localhost:stdout: Performing arbexit for localhost
20110713011454:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011454:localhost:stderr: (stderr) Exiting with code 0
20110713011454:localhost:exit: 0
20110713011454:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011455:localhost:stdout: Performing myhost
20110713011455:localhost:stdout: Performing arbexit for localhost
20110713011455:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011455:localhost:stderr: (stderr) Exiting with code 0
20110713011455:localhost:exit: 0
20110713011558:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011559:localhost:stdout: Performing myhost
20110713011559:localhost:stdout: Performing arbexit for localhost
20110713011559:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011559:localhost:stderr: (stderr) Exiting with code 0
20110713011559:localhost:exit: 0
20110713011559:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011559:localhost:stdout: Performing myhost
20110713011559:localhost:stdout: Performing arbexit for localhost
20110713011559:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011559:localhost:stderr: (stderr) Exiting with code 0
20110713011559:localhost:exit: 0
20110713011654:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011654:localhost:stdout: Performing myhost
20110713011654:localhost:stdout: Performing arbexit for localhost
20110713011654:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011654:localhost:stderr: (stderr) Exiting with code 0
20110713011654:localhost:exit: 0
20110713011654:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011655:localhost:stdout: Performing myhost
20110713011655:localhost:stdout: Performing arbexit for localhost
20110713011655:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011655:localhost:stderr: (stderr) Exiting with code 0
20110713011655:localhost:exit: 0
20110713011722:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011723:localhost:stdout: Performing myhost
20110713011723:localhost:stdout: Performing arbexit for localhost
20110713011723:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011723:localhost:stderr: (stderr) Exiting with code 0
20110713011723:localhost:exit: 0
20110713011723:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011723:localhost:stdout: Performing myhost
20110713011723:localhost:stdout: Performing arbexit for localhost
20110713011723:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011723:localhost:stderr: (stderr) Exiting with code 0
20110713011723:localhost:exit: 0
20110713011841:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011856:localhost:stdout: Performing myhost
20110713011856:localhost:stderr: (stderr) Exiting with code 0
20110713011856:localhost:exit: 0
20110713011856:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713011856:localhost:stdout: Performing arbexit for localhost
20110713011916:localhost:stdout: Performing myhost
20110713011916:localhost:stderr: (stderr) Exiting with code 0
20110713011916:localhost:exit: 0
20110713011916:localhost:stdout: Performing arbexit for localhost
20110713011856:localhost:stdout: (stdout) localhost Exiting with code 0
20110713011916:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013424:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013424:localhost:stdout: Performing myhost
20110713013424:localhost:stdout: Performing arbexit for localhost
20110713013424:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013424:localhost:stderr: (stderr) Exiting with code 0
20110713013424:localhost:exit: 0
20110713013424:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013425:localhost:stdout: Performing myhost
20110713013425:localhost:stdout: Performing arbexit for localhost
20110713013425:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013425:localhost:stderr: (stderr) Exiting with code 0
20110713013425:localhost:exit: 0
20110713013506:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013506:localhost:stdout: Performing myhost
20110713013506:localhost:stdout: Performing arbexit for localhost
20110713013506:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013506:localhost:stderr: (stderr) Exiting with code 0
20110713013506:localhost:exit: 0
20110713013506:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013507:localhost:stdout: Performing myhost
20110713013507:localhost:stdout: Performing arbexit for localhost
20110713013507:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013507:localhost:stderr: (stderr) Exiting with code 0
20110713013507:localhost:exit: 0
20110713013533:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013534:localhost:stdout: Performing myhost
20110713013534:localhost:stdout: Performing arbexit for localhost
20110713013534:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013534:localhost:stderr: (stderr) Exiting with code 0
20110713013534:localhost:exit: 0
20110713013534:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013534:localhost:stdout: Performing myhost
20110713013534:localhost:stdout: Performing arbexit for localhost
20110713013534:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013534:localhost:stderr: (stderr) Exiting with code 0
20110713013534:localhost:exit: 0
20110713013553:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013553:localhost:stdout: Performing myhost
20110713013553:localhost:stdout: Performing arbexit for localhost
20110713013553:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013553:localhost:stderr: (stderr) Exiting with code 0
20110713013553:localhost:exit: 0
20110713013553:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013554:localhost:stdout: Performing myhost
20110713013554:localhost:stdout: Performing arbexit for localhost
20110713013554:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013554:localhost:stderr: (stderr) Exiting with code 0
20110713013554:localhost:exit: 0
20110713013813:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013814:localhost:stdout: Performing myhost
20110713013814:localhost:stdout: Performing arbexit for localhost
20110713013814:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013814:localhost:stderr: (stderr) Exiting with code 0
20110713013814:localhost:exit: 0
20110713013814:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713013814:localhost:stdout: Performing myhost
20110713013814:localhost:stdout: Performing arbexit for localhost
20110713013814:localhost:stdout: (stdout) localhost Exiting with code 0
20110713013814:localhost:stderr: (stderr) Exiting with code 0
20110713013814:localhost:exit: 0
20110713014211:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014212:localhost:stdout: Performing myhost
20110713014212:localhost:stdout: Performing arbexit for localhost
20110713014212:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014212:localhost:stderr: (stderr) Exiting with code 0
20110713014212:localhost:exit: 0
20110713014212:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014212:localhost:stdout: Performing myhost
20110713014212:localhost:stdout: Performing arbexit for localhost
20110713014212:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014212:localhost:stderr: (stderr) Exiting with code 0
20110713014212:localhost:exit: 0
20110713014237:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014237:localhost:stdout: Performing myhost
20110713014237:localhost:stdout: Performing arbexit for localhost
20110713014237:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014237:localhost:stderr: (stderr) Exiting with code 0
20110713014237:localhost:exit: 0
20110713014237:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014238:localhost:stdout: Performing myhost
20110713014238:localhost:stdout: Performing arbexit for localhost
20110713014238:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014238:localhost:stderr: (stderr) Exiting with code 0
20110713014238:localhost:exit: 0
20110713024558:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024559:localhost:stdout: Performing myhost
20110713024559:localhost:stdout: Performing echo for localhost
20110713024559:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024559:localhost:stdout: helloend
20110713024648:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024648:localhost:stdout: Performing myhost
20110713024648:localhost:stdout: Performing echo for localhost
20110713024648:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024648:localhost:stdout: hello
20110713024648:localhost:stdout: end
20110713024708:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024709:localhost:stdout: Performing myhost
20110713024709:localhost:stdout: Performing echo for localhost
20110713024709:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024709:localhost:stdout: hello
20110713024709:localhost:stdout: end
20110713024719:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024719:localhost:stdout: Performing myhost
20110713024719:localhost:stdout: Performing echo for localhost
20110713024719:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024719:localhost:stdout: hello
20110713024719:localhost:stdout: end
20110713024748:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024749:localhost:stdout: Performing myhost
20110713024749:localhost:stdout: Performing echo for localhost
20110713024749:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024749:localhost:stdout: hello
20110713024749:localhost:stdout: end
20110713024803:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024804:localhost:stdout: Performing myhost
20110713024804:localhost:stdout: Performing echo for localhost
20110713024804:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024804:localhost:stdout: hello
20110713024804:localhost:stdout: end
20110713024815:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024816:localhost:stdout: Performing myhost
20110713024816:localhost:stdout: Performing echo for localhost
20110713024816:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024816:localhost:stdout: hello
20110713024816:localhost:stdout: end
20110713024837:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024837:localhost:stdout: Performing myhost
20110713024837:localhost:stdout: Performing echo for localhost
20110713024837:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024837:localhost:stdout: hello
20110713024837:localhost:stdout: end
20110713024837:localhost:stdout: hey
20110713024943:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024944:localhost:stdout: Performing myhost
20110713024944:localhost:stdout: Performing echo for localhost
20110713024944:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024944:localhost:stdout: hello
20110713024944:localhost:stdout: end
20110713024944:localhost:stdout: hey
20110713024957:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713024958:localhost:stdout: Performing myhost
20110713024958:localhost:stdout: Performing echo for localhost
20110713024958:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713024958:localhost:stdout: hello
20110713024958:localhost:stdout: end
20110713024958:localhost:stdout: hey
20110713024958:localhost:exit: 0
20110713025006:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713025006:localhost:stdout: Performing myhost
20110713025006:localhost:stdout: Performing echo for localhost
20110713025006:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713025006:localhost:stdout: hello
20110713025006:localhost:stdout: end
20110713025006:localhost:exit: 0
20110713025020:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713025020:localhost:stdout: Performing myhost
20110713025020:localhost:stdout: Performing echo for localhost
20110713025020:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713025020:localhost:stdout: hello
20110713025033:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713025033:localhost:stdout: Performing myhost
20110713025033:localhost:stdout: Performing echo for localhost
20110713025033:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713025033:localhost:stdout: hello
20110713025033:localhost:stdout: end
20110713025033:localhost:exit: 0
20110713035154:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713035156:localhost:stdout: Performing myhost
20110713035156:localhost:stdout: Performing echo for localhost
20110713035156:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713035156:localhost:stdout: hello
20110713035156:localhost:exit: 0
20110713035156:localhost:stdout: end
20110713035313:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110713035313:localhost:stdout: Performing myhost
20110713035313:localhost:stdout: Performing echo for localhost
20110713035313:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110713035313:localhost:stdout: hello
20110713035313:localhost:stdout: end
20110713035313:localhost:exit: 0
/*global require */
// That that setting member with this always sets the member on the inheriting
// object rather than the prototype even when the method is defined on the
// protoytpe.
var assert = require('assert'),
a, b;
function setX(x) {
this.x = x;
}
function setY(y) {
this.y = y;
}
a = {};
b = Object.create(a);
assert.equal(a.x, undefined);
a.x = 2;
assert.equal(a.x, 2);
assert.equal(b.x, 2);
a.setX = setX;
b.setX(3);
assert.equal(a.x, 2);
assert.equal(b.x, 3);
assert.equal(a.y, undefined);
a.setY = setY;
b.setY(4);
assert.equal(a.y, undefined);
assert.equal(b.y, 4);
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (chunk) {
process.stdout.write('data: ' + chunk);
});
process.stdin.on('end', function () {
process.stdout.write('end');
});
+12
-7

@@ -0,10 +1,15 @@

0.2.1
- Add remote process stdout/stderr custom listener support for ssh() and scp()
- Add ability to write to remote process stdin
- Revise documentation and make JSON notation standard config pattern
0.2.0
- Modified hosts objects implementation to prototype-based implementation
- Semantic change from 'host' objects to 'controller' objects
- Separated mass configuration from controller objects implementation
- Modify hosts objects implementation to prototype-based implementation
- Make semantic change from 'host' objects to 'controller' objects
- Separate mass configuration from controller objects implementation
- Tasks now get config object's id with id() as method instead of as property
- Added controllers() configurator for array and JSON notation configuration
- Deprecated hosts(), prints deprecation warning, will remove in future release
- Changed setting of log path from log to logPath on hosts (now controllers)
- Extended configuration, including deprecated, examples
- Add controllers() configurator for array and JSON notation configuration
- Deprecate hosts(), prints deprecation warning, will remove in future release
- Change setting of log path from log to logPath on hosts (now controllers)
- Extend configuration, including deprecated, examples

@@ -11,0 +16,0 @@ 0.1.9

@@ -244,1 +244,305 @@ 20110710184313:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js mycluster arbexit 0

20110710191104:localhost:exit: 0
20110713014636:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014636:localhost:stdout: Performing myhost
20110713014636:localhost:stdout: Performing arbexit for localhost
20110713014636:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014636:localhost:stderr: (stderr) Exiting with code 0
20110713014636:localhost:exit: 0
20110713014636:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014637:localhost:stdout: Performing myhost
20110713014637:localhost:stdout: Performing arbexit for localhost
20110713014637:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014637:localhost:stderr: (stderr) Exiting with code 0
20110713014637:localhost:exit: 0
20110713014711:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014711:localhost:stdout: Performing myhost
20110713014711:localhost:stdout: Performing arbexit for localhost
20110713014711:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014711:localhost:stderr: (stderr) Exiting with code 0
20110713014711:localhost:exit: 0
20110713014711:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713014712:localhost:stdout: Performing myhost
20110713014712:localhost:stdout: Performing arbexit for localhost
20110713014712:localhost:stdout: (stdout) localhost Exiting with code 0
20110713014712:localhost:stderr: (stderr) Exiting with code 0
20110713014712:localhost:exit: 0
20110713015603:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015604:localhost:stdout: Performing myhost
20110713015604:localhost:stdout: Performing arbexit for localhost
20110713015604:localhost:stdout: (stdout) localhost Exiting with code 0
20110713015604:localhost:stderr: (stderr) Exiting with code 0
20110713015604:localhost:exit: 0
20110713015604:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015604:localhost:stdout: Performing myhost
20110713015604:localhost:stdout: Performing arbexit for localhost
20110713015604:localhost:stdout: (stdout) localhost Exiting with code 0
20110713015604:localhost:stderr: (stderr) Exiting with code 0
20110713015604:localhost:exit: 0
20110713015607:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015608:localhost:stdout: Performing myhost
20110713015608:localhost:stdout: Performing arbexit for localhost
20110713015608:localhost:stdout: (stdout) localhost Exiting with code 0
20110713015608:localhost:stderr: (stderr) Exiting with code 0
20110713015608:localhost:exit: 0
20110713015608:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015608:localhost:stdout: Performing myhost
20110713015608:localhost:stdout: Performing arbexit for localhost
20110713015608:localhost:stdout: (stdout) localhost Exiting with code 0
20110713015608:localhost:stderr: (stderr) Exiting with code 0
20110713015608:localhost:exit: 0
20110713015634:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015634:localhost:stdout: Performing myhost
20110713015634:localhost:stdout: Performing arbexit for localhost
20110713015634:localhost:stdout: (stdout) Exiting with code 0
20110713015634:localhost:stderr: (stderr) Exiting with code 0
20110713015634:localhost:exit: 0
20110713015634:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015635:localhost:stdout: Performing myhost
20110713015635:localhost:stdout: Performing arbexit for localhost
20110713015635:localhost:stdout: (stdout) Exiting with code 0
20110713015635:localhost:stderr: (stderr) Exiting with code 0
20110713015635:localhost:exit: 0
20110713015705:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015705:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015706:localhost:stdout: Performing myhost
20110713015706:localhost:stdout: Performing arbexit for localhost
20110713015706:127.0.0.1:stdout: Performing myhost
20110713015706:localhost:stdout: (stdout) Exiting with code 0
20110713015706:127.0.0.1:stdout: Performing arbexit for localhost
20110713015706:localhost:stderr: (stderr) Exiting with code 0
20110713015706:127.0.0.1:stdout: (stdout) Exiting with code 0
20110713015706:127.0.0.1:stderr: (stderr) Exiting with code 0
20110713015706:localhost:exit: 0
20110713015706:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015706:127.0.0.1:exit: 0
20110713015706:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015706:localhost:stdout: Performing myhost
20110713015706:127.0.0.1:stdout: Performing myhost
20110713015706:localhost:stdout: Performing arbexit for localhost
20110713015706:127.0.0.1:stdout: Performing arbexit for localhost
20110713015706:localhost:stdout: (stdout) Exiting with code 0
20110713015706:127.0.0.1:stdout: (stdout) Exiting with code 0
20110713015706:localhost:stderr: (stderr) Exiting with code 0
20110713015706:127.0.0.1:stderr: (stderr) Exiting with code 0
20110713015706:localhost:exit: 0
20110713015706:127.0.0.1:exit: 0
20110713015836:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015836:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015836:127.0.0.1:stdout: Performing myhost
20110713015836:localhost:stdout: Performing myhost
20110713015836:127.0.0.1:stdout: Performing arbexit for localhost
20110713015836:localhost:stdout: Performing arbexit for localhost
20110713015836:127.0.0.1:stdout: (stdout) Exiting with code 0
20110713015836:localhost:stdout: (stdout) Exiting with code 0
20110713015836:127.0.0.1:stderr: (stderr) Exiting with code 0
20110713015836:localhost:stderr: (stderr) Exiting with code 0
20110713015836:localhost:exit: 0
20110713015836:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015836:127.0.0.1:exit: 0
20110713015836:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015837:127.0.0.1:stdout: Performing myhost
20110713015837:localhost:stdout: Performing myhost
20110713015837:127.0.0.1:stdout: Performing arbexit for localhost
20110713015837:localhost:stdout: Performing arbexit for localhost
20110713015837:127.0.0.1:stdout: (stdout) Exiting with code 0
20110713015837:localhost:stdout: (stdout) Exiting with code 0
20110713015837:127.0.0.1:stderr: (stderr) Exiting with code 0
20110713015837:localhost:stderr: (stderr) Exiting with code 0
20110713015837:127.0.0.1:exit: 0
20110713015837:localhost:exit: 0
20110713015841:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015842:localhost:stdout: Performing myhost
20110713015842:localhost:stdout: Performing arbexit for localhost
20110713015842:localhost:stdout: (stdout) Exiting with code 0
20110713015842:localhost:stderr: (stderr) Exiting with code 0
20110713015842:localhost:exit: 0
20110713015842:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015842:localhost:stdout: Performing myhost
20110713015842:localhost:stdout: Performing arbexit for localhost
20110713015842:localhost:stdout: (stdout) Exiting with code 0
20110713015842:localhost:stderr: (stderr) Exiting with code 0
20110713015842:localhost:exit: 0
20110713015850:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713015850:localhost:stdout: Performing myhost
20110713015850:localhost:stdout: Performing arbexit for localhost
20110713015850:localhost:stdout: (stdout) Exiting with code 0
20110713015850:localhost:stderr: (stderr) Exiting with code 0
20110713015850:localhost:exit: 0
20110713020100:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713020100:localhost:stdout: Performing myhost
20110713020100:localhost:stdout: Performing arbexit for localhost
20110713020100:localhost:stdout: (stdout) Exiting with code 0
20110713020100:localhost:stderr: (stderr) Exiting with code 0
20110713020100:localhost:exit: 0
20110713022709:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110713022710:localhost:stdout: Performing myhost
20110713022710:localhost:stdout: Performing arbexit for localhost
20110713022710:localhost:stdout: (stdout) Exiting with code 0
20110713022710:localhost:stderr: (stderr) Exiting with code 0
20110713022710:localhost:exit: 0
20110714125605:localhost:tsmith:ssh: date
20110714125607:localhost:stdout: Thu Jul 14 12:56:07 UTC 2011
20110714125607:localhost:exit: 0
20110714125623:localhost:tsmith:ssh: date
20110714125623:localhost:stdout: Thu Jul 14 12:56:23 UTC 2011
20110714125623:localhost:exit: 0
20110714125633:localhost:tsmith:ssh: date
20110714125633:localhost:stdout: Thu Jul 14 12:56:33 UTC 2011
20110714125633:localhost:exit: 0
20110714125645:localhost:tsmith:ssh: date
20110714125645:localhost:stdout: Thu Jul 14 12:56:45 UTC 2011
20110714125645:localhost:exit: 0
20110714131856:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110714131857:localhost:stdout: Performing myhost
20110714131857:localhost:stdout: Performing echo for localhost
20110714131857:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110714131857:localhost:stdout: hello
20110714131857:localhost:stdout: end
20110714131857:localhost:exit: 0
20110714131903:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110714131904:localhost:stdout: Performing myhost
20110714131904:localhost:stdout: Performing echo for localhost
20110714131904:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110714131904:localhost:stdout: hello
20110714131904:localhost:stdout: end
20110714131904:localhost:exit: 0
20110714131908:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110714131909:localhost:stdout: Performing myhost
20110714131909:localhost:stdout: Performing echo for localhost
20110714131909:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110714131909:localhost:stdout: hello
20110714131909:localhost:stdout: end
20110714131909:localhost:exit: 0
20110714131920:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost echo
20110714131920:localhost:stdout: Performing myhost
20110714131920:localhost:stdout: Performing echo for localhost
20110714131920:localhost:stdout: Enter data to echo ("end" to stop echoing):
20110714131920:localhost:stdout: hello
20110714131920:localhost:stdout: end
20110714131920:localhost:exit: 0
20110714131936:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110714131937:localhost:stdout: Performing myhost
20110714131937:localhost:stdout: Performing arbexit for localhost
20110714131937:localhost:stdout: (stdout) Exiting with code 0
20110714131937:localhost:stderr: (stderr) Exiting with code 0
20110714131937:localhost:exit: 0
20110714131937:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110714131937:localhost:stdout: Performing myhost
20110714131937:localhost:stdout: Performing arbexit for localhost
20110714131937:localhost:stdout: (stdout) Exiting with code 0
20110714131937:localhost:stderr: (stderr) Exiting with code 0
20110714131937:localhost:exit: 0
20110714144422:localhost:tsmith:ssh: date
20110714144422:localhost:stdout: Thu Jul 14 14:44:22 UTC 2011
20110714144422:localhost:exit: 0
20110714151902:localhost:tsmith:ssh: date
20110714151902:localhost:stdout: Thu Jul 14 15:19:02 UTC 2011
20110714151902:localhost:exit: 0
20110715012322:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012322:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012322:127.0.0.1:stdout: Performing myhost
20110715012323:localhost:stdout: Performing myhost
20110715012323:127.0.0.1:stdout: Performing arbexit for localhost
20110715012323:127.0.0.1:stdout: (stdout) Exiting with code 0
20110715012323:127.0.0.1:stderr: (stderr) Exiting with code 0
20110715012323:127.0.0.1:exit: 0
20110715012323:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012323:localhost:stdout: Performing arbexit for localhost
20110715012323:localhost:stdout: (stdout) Exiting with code 0
20110715012323:localhost:stderr: (stderr) Exiting with code 0
20110715012323:localhost:exit: 0
20110715012323:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012323:localhost:stdout: Performing myhost
20110715012323:localhost:stdout: Performing arbexit for localhost
20110715012323:localhost:stdout: (stdout) Exiting with code 0
20110715012323:localhost:stderr: (stderr) Exiting with code 0
20110715012323:localhost:exit: 0
20110715012323:127.0.0.1:stdout: Performing myhost
20110715012323:127.0.0.1:stdout: Performing arbexit for localhost
20110715012323:127.0.0.1:stdout: (stdout) Exiting with code 0
20110715012323:127.0.0.1:stderr: (stderr) Exiting with code 0
20110715012323:127.0.0.1:exit: 0
20110715012331:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012332:localhost:stdout: Performing myhost
20110715012332:localhost:stdout: Performing arbexit for localhost
20110715012332:localhost:stdout: (stdout) Exiting with code 0
20110715012332:localhost:stderr: (stderr) Exiting with code 0
20110715012332:localhost:exit: 0
20110715012332:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012332:localhost:stdout: Performing myhost
20110715012332:localhost:stdout: Performing arbexit for localhost
20110715012332:localhost:stdout: (stdout) Exiting with code 0
20110715012332:localhost:stderr: (stderr) Exiting with code 0
20110715012332:localhost:exit: 0
20110715012842:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012842:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012842:127.0.0.1:stdout: Performing myhost
20110715012842:localhost:stdout: Performing myhost
20110715012842:127.0.0.1:stdout: Performing arbexit for localhost
20110715012842:localhost:stdout: Performing arbexit for localhost
20110715012842:127.0.0.1:stdout: (stdout) Exiting with code 0
20110715012842:localhost:stdout: (stdout) Exiting with code 0
20110715012842:127.0.0.1:stderr: (stderr) Exiting with code 0
20110715012842:localhost:stderr: (stderr) Exiting with code 0
20110715012843:localhost:exit: 0
20110715012843:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012843:127.0.0.1:exit: 0
20110715012843:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012843:localhost:stdout: Performing myhost
20110715012843:127.0.0.1:stdout: Performing myhost
20110715012843:localhost:stdout: Performing arbexit for localhost
20110715012843:127.0.0.1:stdout: Performing arbexit for localhost
20110715012843:localhost:stdout: (stdout) Exiting with code 0
20110715012843:127.0.0.1:stdout: (stdout) Exiting with code 0
20110715012843:localhost:stderr: (stderr) Exiting with code 0
20110715012843:127.0.0.1:stderr: (stderr) Exiting with code 0
20110715012843:localhost:exit: 0
20110715012843:127.0.0.1:exit: 0
20110715012848:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012848:localhost:stdout: Performing myhost
20110715012848:localhost:stdout: Performing arbexit for localhost
20110715012848:localhost:stdout: (stdout) Exiting with code 0
20110715012848:localhost:stderr: (stderr) Exiting with code 0
20110715012848:localhost:exit: 0
20110715012848:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012849:localhost:stdout: Performing myhost
20110715012849:localhost:stdout: Performing arbexit for localhost
20110715012849:localhost:stdout: (stdout) Exiting with code 0
20110715012849:localhost:stderr: (stderr) Exiting with code 0
20110715012849:localhost:exit: 0
20110715012855:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012856:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 0
20110715012856:localhost:stdout: Performing myhost
20110715012856:localhost:stdout: Performing arbexit for localhost
20110715012856:localhost:stdout: (stdout) Exiting with code 0
20110715012856:127.0.0.1:stdout: Performing myhost
20110715012856:127.0.0.1:stdout: Performing arbexit for localhost
20110715012856:localhost:stderr: (stderr) Exiting with code 0
20110715012856:127.0.0.1:stdout: (stdout) Exiting with code 0
20110715012856:127.0.0.1:stderr: (stderr) Exiting with code 0
20110715012856:localhost:exit: 0
20110715012856:127.0.0.1:exit: 0
20110715012908:localhost:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 64
20110715012908:127.0.0.1:tsmith:ssh: node /usr/home/tsmith/workspace/node/node-control/example/controls.js myhost arbexit 64
20110715012908:127.0.0.1:stdout: Performing myhost
20110715012908:localhost:stdout: Performing myhost
20110715012908:127.0.0.1:stdout: Performing arbexit for localhost
20110715012908:localhost:stdout: Performing arbexit for localhost
20110715012908:127.0.0.1:stdout: (stdout) Exiting with code 64
20110715012908:localhost:stdout: (stdout) Exiting with code 64
20110715012908:127.0.0.1:stderr: (stderr) Exiting with code 64
20110715012908:localhost:stderr: (stderr) Exiting with code 64
20110715012908:localhost:exit: 64
20110715012908:127.0.0.1:exit: 64
20110715013201:localhost:tsmith:ssh: date
20110715013201:127.0.0.1:tsmith:ssh: date
20110715013201:localhost:stdout: Fri Jul 15 01:32:01 UTC 2011
20110715013201:localhost:exit: 0
20110715013201:127.0.0.1:stdout: Fri Jul 15 01:32:01 UTC 2011
20110715013201:127.0.0.1:exit: 0
20110715013217:localhost:tsmith:ssh: date
20110715013217:127.0.0.1:tsmith:ssh: date
20110715013218:localhost:stdout: Fri Jul 15 01:32:18 UTC 2011
20110715013218:localhost:exit: 0
20110715013218:127.0.0.1:stdout: Fri Jul 15 01:32:18 UTC 2011
20110715013218:127.0.0.1:exit: 0
/*global require, process, console */
// Example with some advanced usage (advanced configuration, error
// callbacks, scpOptions, and config task command line arguments rewriting)
// using localhost as a 'remote' machine and this script recursively to
// simulate exit code returns on the 'remote' machine.
// Example with some advanced usage:
// advanced configuration
// error callbacks
// scpOptions
// config task command line arguments rewriting
// custom listeners
// stdin writing
//
// Uses localhost as a 'remote' machine and this script recursively to simulate
// exit code returns, stderr and stout output, and stdin reading on the
// 'remote' machine.

@@ -15,2 +22,4 @@ // Run like:

// node mycontroller.js mycluster clean
// node mycontroller.js myhost listeners
// node mycontroller.js myhost stdin
// node mycontroller.js myclusterarray test 0

@@ -94,3 +103,3 @@ // node mycontroller.js myclusterjson test 0

code = code || 0;
controller.ssh('node ' + script + ' mycluster arbexit ' + code,
controller.ssh('node ' + script + ' myhost arbexit ' + code,
callback, exitCallback);

@@ -121,3 +130,4 @@ }

code = code || 0;
console.log(' Exiting with code ' + code);
console.log(' (stdout) Exiting with code ' + code);
console.error(' (stderr) Exiting with code ' + code);
process.exit(code);

@@ -134,2 +144,69 @@ });

task('listeners', 'Custom listener example', function (controller) {
var stdout, stderr;
controller.stdout.on('data', function (data) {
console.log(' Custom stdout listerner called for ' +
controller.address);
stdout = stdout || '';
stdout = stdout += data.toString();
});
controller.stderr.on('data', function (data) {
console.log(' Custom stderr listerner called for ' +
controller.address);
stderr = stderr || '';
stderr = stderr += data.toString();
});
doTest(controller, 0, function () {
console.log(' Response gathered by custom stdout listener for ' +
controller.id() + ': \n' + stdout);
console.log(' Response gatehered by custom stderr listener for ' +
controller.id() + ': \n' + stderr);
doTest(controller, 0); // Custom listeners are now cleared
});
});
task('echo', 'Stdin to stdout echo until "end"', function (controller) {
console.log('Enter data to echo ("end" to stop echoing): ');
process.stdin.resume();
process.stdin.on('data', function (chunk) {
process.stdout.write(chunk);
chunk = chunk.toString();
if (chunk.match('end')) {
process.stdin.pause();
}
});
});
task('stdin', 'Test controller stdin usage', function (controller) {
var stdout;
controller.stdout.on('data', function (chunk) {
chunk = chunk.toString();
if (chunk.match('^Enter data')) {
controller.stdin.write('hello\n');
controller.stdin.write('end');
}
});
controller.ssh('node ' + script + ' myhost echo');
});
task('ondate', 'Different logic paths based on date', function (controller) {
var datestring = '';
controller.stdout.on('data', function (chunk) {
datestring += chunk.toString();
});
controller.ssh('date', function () {
console.log(' Date string is ' + datestring);
// Further logic dependent on value of datestring
});
});
control.begin();

@@ -6,3 +6,3 @@ /*global require, process, console */

// QUICK EXAMPLE
j
var control = require('control'),

@@ -12,2 +12,52 @@ task = control.task;

task('mycluster', 'Config for my cluster', function () {
var config = {
'a.domain.com': {
user: 'alogin'
},
'b.domain.com': {
user: 'blogin',
sshOptions: ['-p 44'] // sshd daemon on non-standard port
}
};
return control.controllers(config);
});
task('date', 'Get date', function (controller) {
controller.ssh('date');
});
control.begin();
// CONFIG TASKS
task('mycluster', 'Config for my cluster', function () {
var shared = Object.create(control.controller),
config = {
'a.domain.com': {
user: 'alogin'
},
'b.domain.com': {
user: 'blogin'
}
};
shared.sshOptions = ['-p 44'];
return control.controllers(config, shared);
});
task('mycluster', 'Config for my cluster', function () {
var shared = Object.create(control.controller),
addresses = [ 'a.domain.com',
'b.domain.com',
'c.domain.com' ];
shared.user = 'mylogin';
shared.sshOptions = ['-p 44'];
return control.controllers(addresses, shared);
});
task('mycluster', 'Config for my cluster', function () {
var controllers = [],

@@ -17,6 +67,7 @@ shared = Object.create(control.controller), // Extend prototype

shared.user = 'mylogin'; // Configure user common to all controllers
shared.sshOptions = ['p 44'];
a = Object.create(shared); // Extend shared prototype
a.address = 'a.domain.com';
a.user = 'alogin';
controllers.push(a);

@@ -26,2 +77,3 @@

b.address = 'b.domain.com';
b.user = 'blogin';
controllers.push(b);

@@ -32,54 +84,23 @@

task('date', 'Get date', function (controller) {
controller.ssh('date');
});
control.begin();
// CONTROLLERS
var controller = Object.create(control.controller);
controller.address = 'a.domain.com';
controller.user = 'mylogin';
controller.ips = [
'10.2.136.23',
'10.2.136.24',
'10.2.136.25',
'10.2.136.26',
'10.2.136.27'
];
// CONFIG TASKS
task('mycluster', 'Config for my cluster', function () {
var shared = Object.create(control.controller), // Extend prototype
addresses = [ 'a.domain.com',
'b.domain.com',
'c.domain.com' ];
shared.user = 'mylogin'; // Extend shared prototype
return control.controllers(addresses, shared);
});
task('mycluster', 'Config for my cluster', function () {
var addresses = {
'a.domain.com': {
user: 'dbuser',
sshOptions: ['-p 44']
},
'b.domain.com': {
user: 'appuser',
ips: [
'10.2.136.18',
'10.2.136.19',
'10.2.136.20',
'10.2.136.21',
'10.2.136.22'
]
},
'c.domain.com': {
user: 'appuser',
ips: [
'10.2.136.23',
'10.2.136.24',
'10.2.136.25',
'10.2.136.26',
'10.2.136.27'
]
}
};
return control.controllers(addresses); // All extend control.controller
});
// ROLES
task('mycluster', 'Config for my cluster', function () {
var dbs, apps;
var dbs = Object.create(control.controller),
apps = Object.create(control.controller);

@@ -149,15 +170,27 @@ dbs = {

task('ondate', 'Different logic paths based on date', function (controller) {
var datestring = '';
// QUICK EXAMPLE WITHOUT TASKS
controller.stdout.on('data', function (chunk) {
datestring += chunk.toString();
});
var control = require('../'),
shared = Object.create(control.controller),
i, l, controller, controllers;
controller.ssh('date', function () {
console.log(' Date string is ' + datestring);
// Further logic dependent on value of datestring
});
});
shared.user = process.env.USER;
controllers = control.controllers(['a.domain.com', 'b.domain.com'], shared);
task('stdin', 'Test controller stdin usage', function (controller) {
var stdout;
for (i = 0, l = controllers.length; i < l; i += 1) {
controller = controllers[i];
controller.ssh('date');
}
controller.stdout.on('data', function (chunk) {
chunk = chunk.toString(); // Assumes chunks come in full lines
if (chunk.match('^Enter data')) { // Assumes command has this prompt
controller.stdin.write('hello\n');
}
});
controller.ssh('acommand');
});

@@ -11,6 +11,6 @@ /*global require, process, console, ReadableStream */

task('stream', 'Stream example', function (host) {
task('stream', 'Stream example', function (controller) {
var stdout, stderr;
stdout = host.stdout = new stream.ReadableStream();
stdout = controller.stdout = new stream.ReadableStream();
stdout.on('data', function (data) {

@@ -24,5 +24,5 @@ // Do what you want with the data

stderr = host.stderr = new ReadableStream(); // Can also follow stderr
stderr = controller.stderr = new ReadableStream(); // Can also follow stderr
host.ssh('date',
controller.ssh('date',
function () {}, // Do what you need on success }

@@ -35,16 +35,16 @@ function () {} // Do what you need on non-zero exit }

// really you want to pass additional event handlers, not create a stream
task('streamx', 'Stream example', function (host) {
task('streamx', 'Stream example', function (controller) {
var stdout, stderr;
host.stdout.on('data', function (data) {
controller.stdout.on('data', function (data) {
// Do what you want with the data
// Or collect it for later
});
host.stdout.on('end', function () {
controller.stdout.on('end', function () {
// Optionally trigger on other stream event instead of callbacks
});
host.stderr.on('data', function (data) {}); // Can also follow stderr
controller.stderr.on('data', function (data) {}); // Can also follow stderr
host.ssh('date',
controller.ssh('date',
function () {}, // Do what you need on success }

@@ -57,10 +57,13 @@ function () {} // Do what you need on non-zero exit }

// really you want to pass additional event handlers, not create a stream
task('streamp', 'Stream example', function (host) {
var stdout, stderr, response;
task('streamp', 'Stream example', function (controller) {
var stdout, stderr, response = '';
host.stdout.on('data', function (data) {
controller.stdout.on('data', function (data) {
console.log('Custom listerner called for ' + controller.address);
response = response += data.toString();
});
host.ssh('date', function () {
controller.ssh('date', function () {
console.log('Response seen by custom listener for ' +
controller.id() + ': ' + response);
if (response === 'x') {

@@ -71,5 +74,28 @@ console.log('Response as expected');

}
controller.ssh('date'); // Custom listener is now cleared
});
});
control.begin();
task('streampi', 'Stream example', function (controller) {
var stdout = '', stderr = '';
controller.stdout.on('data', function (data) {
console.log('Custom stdout listerner called for ' + controller.address);
stdout = stdout += data.toString();
});
controller.stderr.on('data', function (data) {
console.log('Custom stderr listerner called for ' + controller.address);
stderr = stderr += data.toString();
});
controller.ssh('test', function () {
console.log('Response seen by custom listener for ' +
controller.id() + ': \n' + response);
console.log('Response seen by custom listener for ' +
controller.id() + ': \n' + response);
controller.ssh('test'); // Custom listener is now cleared
});
});
require('./controls.js');

@@ -19,2 +19,4 @@ /*global require, exports, console, spawn: true */

// Support logging
function log(message, prefix) {

@@ -36,13 +38,65 @@

function listen(subProcess, callback, exitCallback) {
// Support custom listeners via controller.stdout.on(event, callback) pattern
prototype.stdout = {};
prototype.stdout.listeners = 'stdoutListeners';
prototype.stdout.controller = prototype;
prototype.stderr = {};
prototype.stderr.listeners = 'stderrListeners';
prototype.stderr.controller = prototype;
function on(evt, callback) {
var listeners = this.listeners,
controller = this.controller;
controller[listeners] = controller[listeners] || {};
controller[listeners][evt] = callback;
}
prototype.stdout.on = on;
prototype.stderr.on = on;
// Controller support for adding listeners to subprocess stream upon call
function addListenersToStream(listeners, stream) {
var evt, callback;
if (listeners) {
for (evt in listeners) {
if (listeners.hasOwnProperty(evt)) {
callback = listeners[evt];
stream.on(evt, callback);
}
}
}
}
function addCustomListeners(child) {
var stdoutListeners = this.stdoutListeners,
stderrListeners = this.stderrListeners;
// Clear custom listeners on each call
this.stdoutListeners = {};
this.stderrListeners = {};
addListenersToStream(stdoutListeners, child.stdout);
addListenersToStream(stderrListeners, child.stderr);
}
prototype.addCustomListeners = addCustomListeners;
function listen(child, callback, exitCallback) {
var codes = '', controller = this;
subProcess.stdout.addListener('data', function (data) {
this.stdin = child.stdin;
this.addCustomListeners(child);
child.stdout.addListener('data', function (data) {
controller.logBuffer('stdout: ', data);
});
subProcess.stderr.addListener('data', function (data) {
child.stderr.addListener('data', function (data) {
controller.logBuffer('stderr: ', data);
});
subProcess.addListener('exit', function (code) {
child.addListener('exit', function (code) {
controller.logBuffer('exit: ', code);

@@ -80,3 +134,3 @@ if (code === 0) {

args = ['-l' + user, this.address, "''" + command + "''"],
subProcess;
child;

@@ -95,4 +149,4 @@ if (options) {

this.log(user + ':ssh: ' + command);
subProcess = spawn('ssh', args);
this.listen(subProcess, callback, exitCallback);
child = spawn('ssh', args);
this.listen(child, callback, exitCallback);
}

@@ -118,3 +172,3 @@ prototype.ssh = ssh;

args = ['-r', local, reference],
subProcess;
child;

@@ -126,4 +180,4 @@ if (options) {

controller.log(user + ':scp: ' + local + ' ' + reference);
subProcess = spawn('scp', args);
controller.listen(subProcess, callback, exitCallback);
child = spawn('scp', args);
controller.listen(child, callback, exitCallback);
} else {

@@ -130,0 +184,0 @@ throw new Error('Local: ' + local + ' does not exist');

{ "name" : "control",
"description" : "Scripted asynchronous control of remote machines in parallel via ssh",
"version" : "0.2.0",
"version" : "0.2.1",
"author" : "Thomas Smith <node@thomassmith.com>",

@@ -5,0 +5,0 @@ "main" : "./lib",

+238
-153
DESCRIPTION
Use node-control to define ssh and scp tasks for system administration or code
deployment, then execute them on one or many machines simultaneously. Strong
logging creates a complete audit trail of commands executed on remote machines
in logs easily analyzed by standard text manipulation tools.
Define tasks for system administration or code deployment, then execute them on
one or many remote machines simultaneously. Strong logging creates a complete
audit trail of commands executed on remote machines in logs easily analyzed by
standard text manipulation tools.

@@ -24,19 +24,16 @@ node-control depends only on OpenSSH and Node on the local control machine.

task('mycluster', 'Config for my cluster', function () {
var controllers = [],
shared = Object.create(control.controller), // Extend prototype
a, b;
var config = {
'a.domain.com': {
user: 'alogin'
},
'b.domain.com': {
user: 'blogin',
sshOptions: ['-p 44'] // sshd daemon on non-standard port
}
};
shared.user = 'mylogin'; // Configure user common to all controllers
return control.controllers(config);
});
a = Object.create(shared); // Extend shared prototype
a.address = 'a.domain.com';
controllers.push(a);
b = Object.create(shared);
b.address = 'b.domain.com';
controllers.push(b);
return controllers;
});
task('date', 'Get date', function (controller) {

@@ -75,153 +72,193 @@ controller.ssh('date');

See CODE DEPLOYMENT EXAMPLE for an example of deploying an application to
remote servers.
CODE DEPLOYMENT EXAMPLE
A task that will upload a local compressed tar file containing a release of a
node application to a remote machine, untar it, and start the node application.
INSTALLATION
var path = require('path');
If you use npm:
task('deploy', 'Deploy my app', function (controller, release) {
var basename = path.basename(release),
remoteDir = '/apps/',
remotePath = path.join(remoteDir, basename),
remoteAppDir = path.join(remoteDir, 'myapp');
controller.scp(release, remoteDir, function () {
controller.ssh('tar xzvf ' + remotePath + ' -C ' + remoteDir,
function () {
controller.ssh("sh -c 'cd " + remoteAppDir + " && node myapp.js'");
});
});
});
npm install control
Execute as follows, for example:
If you do not use npm, clone this repository with git or download the latest
version using the GitHub repository Downloads link. Then use as a standard Node
module by requiring the node-control directory.
node controls.js mycluster deploy ~/myapp/releases/myapp-1.0.tgz
A full deployment solution would shut down the existing application and have
different directory conventions. node-control does not assume a particular
style or framework. It provides tools to build a custom deployment strategy for
your application, system, or framework.
EXAMPLE CONTROLS
As you read this documentation, you may find it useful to refer to the
example/controls.js file. Its work tasks cover a variety of advanced usage. The
config tasks use your local machine as a mock remote machine or cluster, so if
you run an sshd daemon locally, you can run the controls against your own
machine to experiment.
INSTALLATION
If you use npm:
CONFIG TASKS
npm install control
When using tasks, you always identify two tasks on the command line for remote
operations. The first task is the config task and the second task is the work
task. Config tasks have a name, description, and function that will be called
once:
If you do not use npm, clone this repository with git or download the latest
version using the GitHub repository Downloads link. Then use as a standard Node
module by requiring the node-control directory.
task('mycluster', 'Config for my cluster', function () {
The config task function must return an array of controllers (objects that
extend the control.controller prototype, described further in CONTROLLERS).
Each controller in the array controls a single machine and optionally has its
own properties.
CONFIG TASKS
When using tasks, always identify two tasks on the command line for remote
operations. The first task, the config task, must return an array of
controller objects (objects that extend the control.controller prototype,
described further in CONTROLLER OBJECTS). Each controller object in the
array controls a single machine and optionally has its own set of properties.
Config tasks enable definition of reusable work tasks independent of the
machines they will control. For example, if you have a staging environment with
different machines than your production environment you can create two
different config tasks returning different machines, yet use the same deploy
work task:
different machines than your production environment, you can create two
different config tasks, each returning controllers for machines in the
respective environment, yet use the same deploy work task:
node controls.js stage deploy ~/myapp/releases/myapp-1.0.tgz
...
node controls.js production deploy ~/myapp/releases/myapp-1.0.tgz
If all the machines in a cluster share common properties, you can extend the
control.controller prototype and pass the new prototype into controllers() as
the second argument. For example, if all the machines in your cluster run sshd
on a non-standard port instead of just one as in QUICK EXAMPLE:
MASS CONFIGURATION
task('mycluster', 'Config for my cluster', function () {
var shared = Object.create(control.controller),
config = {
'a.domain.com': {
user: 'alogin'
},
'b.domain.com': {
user: 'blogin'
}
};
The controllers() method exported by node-control takes a single controller
object as a prototype and multiplies it by an array of addresses to create an
array of controller objects that all prototypically inherit from the same
controller prototype:
shared.sshOptions = ['-p 44'];
return control.controllers(config, shared);
});
controllers() will return an array of controllers that prototypically inherit
from the shared prototype instead of the base prototype, each having
controller-specific properties as defined in the JSON notation. In this case,
both controllers will effectively have sshOptions = ['-p 44'].
If all machines in your cluster have the same properties, can you pass an array
of addresses as the first argument to controllers(). For example, if all the
machines your cluster run sshd on a non-standard port and you use the same
login on each:
task('mycluster', 'Config for my cluster', function () {
var shared = Object.create(control.controller), // Extend base prototype
var shared = Object.create(control.controller),
addresses = [ 'a.domain.com',
'b.domain.com',
'c.domain.com' ];
shared.user = 'mylogin'; // Extend shared prototype
return control.controllers(addresses, shared); // All extend shared
shared.user = 'mylogin';
shared.sshOptions = ['-p 44'];
return control.controllers(addresses, shared);
});
Alternatively, configure each machine with JSON notation and pass that into
You can also build up your list of controllers without the use of
controllers():
task('mycluster', 'Config for my cluster', function () {
var addresses = {
'a.domain.com': {
user: 'dbuser',
sshOptions: ['-p 44']
},
'b.domain.com': {
user: 'appuser',
ips: [
'10.2.136.18',
'10.2.136.19',
'10.2.136.20',
'10.2.136.21',
'10.2.136.22'
]
},
'c.domain.com': {
user: 'appuser',
ips: [
'10.2.136.23',
'10.2.136.24',
'10.2.136.25',
'10.2.136.26',
'10.2.136.27'
]
}
};
return control.controllers(addresses); // All extend control.controller
var controllers = [],
shared = Object.create(control.controller), // Extend prototype
a, b;
shared.sshOptions = ['p 44'];
a = Object.create(shared); // Extend shared prototype
a.address = 'a.domain.com';
a.user = 'alogin';
controllers.push(a);
b = Object.create(shared);
b.address = 'b.domain.com';
b.user = 'blogin';
controllers.push(b);
return controllers;
});
When using JSON notation, you can pass a shared prototype into controllers()
just as with the array approach. controllers() will then return an array
of controller objects that prototypically inherit from the shared prototype,
each having controller-specific properties as defined in the JSON notation.
See examples/mycontroller.js for examples of different configuration approaches.
WORK TASKS
Work tasks define logic to drive each controller returned by the config task.
They have a name, description, and a callback that will execute independently
and simultaneously for each controller:
task('date', 'Get date', function (controller) {
CONTROLLER OBJECTS
node-control provides a base controller prototype as control.controller, which
all controllers must extend. To create controllers, extend this prototype and
assign it a DNS or IP address :
Arguments on the command line after the name of the work task become arguments
to the work task's function. With this task:
controller = Object.create(control.controller)
controller.address = 'a.domain.com'
task('deploy', 'Deploy my app', function (controller, release) {
Or use the controllers() method as described in MASS CONFIGURATION.
This command:
When using the tasks system, each controller object returned by the config task
is independently passed to the second task, which is the work task. The
controller object is always passed to the work task's function as the first
argument:
node controls.js stage deploy ~/myapp/releases/myapp-1.0.tgz
task('date', 'Get date', function (controller) {
Results in:
The controller object provides access to all the properties defined on it in
the config task.
release = '~/myapp/releases/myapp-1.0.tgz'
More than one argument is possible:
task('deploy', 'Deploy my app', function (controller, release, tag) {
TASK EXECUTION
To execute the tasks identified on the command line, use the begin() method
after you have defined all your config and work tasks:
var control = require('control');
... // Define tasks
control.begin();
begin() calls the first (config) task identified on the command line to get the
array of controllers, then calls the second (work) task with each of the
controllers. If you run a control script and nothing happens, check if the
script calls begin().
CONTROLLERS
node-control provides a base controller prototype as control.controller, which
all controllers must extend. To create controllers, use the controllers()
method described in CONFIG TASKS or extend the base controller prototype and
assign the controller a DNS or IP address, user if not the same as the local
user, and any other properties required by work tasks or further logic:
var controller = Object.create(control.controller);
controller.address = 'a.domain.com'; // Machine to control
controller.user = 'mylogin'; // Username on remote machine if not same as local
controller.ips = [ // Example of property used by work task or further logic
'10.2.136.23',
'10.2.136.24',
'10.2.136.25',
'10.2.136.26',
'10.2.136.27'
];
The base controller prototype provides ssh() and scp() methods for
communicating with a controller's assigned remote machine.
communicating with a controller's assigned remote machine.

@@ -248,3 +285,4 @@ The ssh() method takes one argument - the command to be executed on the

assume a successful execution of a previous command. However, you can specify
an exit callback that will receive the exit code if a non-zero exit occurs:
an exit callback that will be called and receive the exit code if a non-zero
exit occurs:

@@ -258,47 +296,59 @@ function callback() { ... }

You can make both callbacks the same callback function if you want to check the
exit code and handle a non-zero exit within a single callback.
exit code and handle both zero and non-zero exits within a single callback.
ARGUMENTS
CUSTOM LISTENERS
Arguments on the command line after the name of the work task become arguments
to the work task's function:
When running a command with ssh() on a remote device, controller objects listen
to the stdout and stderr of the process running on the remote device through
the local ssh process, printing what is heard to console and log. You can
attach your own listeners to these stdout and stderr streams to gather data to
use in your callback function:
task('deploy', 'Deploy my app', function (controller, release) {
task('ondate', 'Different logic paths based on date', function (controller) {
var datestring = '';
controller.stdout.on('data', function (chunk) {
datestring += chunk.toString();
});
This command:
controller.ssh('date', function () {
console.log(' Date string is ' + datestring);
// Further logic dependent on value of datestring
});
});
node controls.js stage deploy ~/myapp/releases/myapp-1.0.tgz
Refer to Node's ReadableStream and EventEmitter documentation if the
stdout.on() pattern looks unfamiliar. Controllers also provide a stderr.on()
for attaching custom listeners to the stderr stream.
Results in:
You can respond to prompts and errors as they happen in the remote process
through the remote process stdin stream similar to expect. An example of
responding to a prompt through the stdin of the remote process:
release = '~/myapp/releases/myapp-1.0.tgz'
task('stdin', 'Test controller stdin usage', function (controller) {
var stdout;
controller.stdout.on('data', function (chunk) {
chunk = chunk.toString(); // Assumes chunks come in full lines
if (chunk.match('^Enter data')) { // Assumes command uses this prompt
controller.stdin.write('hello\n');
}
});
More than one argument is possible:
controller.ssh('acommand');
});
task('deploy', 'Deploy my app', function (controller, release, tag) {
The controller only uses custom listeners for the next ssh() or scp() call.
Further ssh() or scp() calls will not attach the custom listener unless it is
reattached via controller.stdout.on() or controller.stderr.on() before the next
call. This avoids unanticipated usage of one-off listeners such as filling the
datestring variable in the first example with the output of every subsequent
ssh() command executed by the controller.
BEGIN()
To execute the tasks using a tasks file, use the begin() method at the
bottom of the tasks file:
var control = require('control');
... // Define tasks
control.begin();
begin() calls the first (config) task identified on the command line to get the
array of controller objects, then calls the second (work) task with each of the
controller objects. From that point, everything happens asynchronously as all
controllers work their way through the work task. If you run a control script
and nothing happens, make sure to check if the script calls begin().
PERFORMING MULTIPLE TASKS

@@ -310,3 +360,3 @@

var perform = require('control').perform;
...
task('mytask', 'My task description', function (controller, argument) {

@@ -316,3 +366,3 @@ perform('anothertask', controller, argument);

perform() requires only the task name and the controller object. Arguments are
perform() requires only the task name and the controller. Arguments are
optional. If the other task supports it, optionally pass a callback function as

@@ -340,3 +390,3 @@ one of the arguments:

LIST TASKS
LISTING TASKS

@@ -380,3 +430,4 @@ To list all defined tasks with descriptions:

task('mycluster', 'Config for my cluster', function () {
var dbs, apps;
var dbs = Object.create(control.controller),
apps = Object.create(control.controller);

@@ -476,7 +527,5 @@ dbs = {

config = {
user: 'mylogin',
sshOptions: [ '-2', '-p 44' ]
};
controller.sshOptions = [ '-2', '-p 44' ];
Use scpOptions in the same manner for scp().

@@ -532,7 +581,39 @@

CODE DEPLOYMENT EXAMPLE
A task that will upload a local compressed tar file containing a release of a
node application to a remote machine, untar it, and start the node application.
var path = require('path');
task('deploy', 'Deploy my app', function (controller, release) {
var basename = path.basename(release),
remoteDir = '/apps/',
remotePath = path.join(remoteDir, basename),
remoteAppDir = path.join(remoteDir, 'myapp');
controller.scp(release, remoteDir, function () {
controller.ssh('tar xzvf ' + remotePath + ' -C ' + remoteDir,
function () {
controller.ssh("sh -c 'cd " + remoteAppDir + " && node myapp.js'");
});
});
});
Execute as follows, for example:
node controls.js mycluster deploy ~/myapp/releases/myapp-1.0.tgz
A full deployment solution would shut down the existing application and have
different directory conventions. node-control does not assume a particular
style or framework. It provides tools to build a custom deployment strategy for
your application, system, or framework.
QUICK EXAMPLE WITHOUT TASKS
You can create scripts to run individually instead of through the tasks system
by using controllers() to create an array of controller objects and then using
the controller objects directly:
by using controllers() to create an array of controllers and then using
the controllers directly:

@@ -543,3 +624,3 @@ var control = require('../'),

shared.user = process.env.USER;
shared.user = 'mylogin';
controllers = control.controllers(['a.domain.com', 'b.domain.com'], shared);

@@ -558,5 +639,9 @@

See example/taskless.js for a working example you can run against your local
machine if running a local sshd.
FEEDBACK
Welcome at node@thomassmith.com or the Node mailing list.