| 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 |
+304
-0
@@ -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 |
+83
-6
| /*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(); |
+89
-56
@@ -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'); | ||
| }); | ||
+40
-14
@@ -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'); |
+64
-10
@@ -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'); |
+1
-1
| { "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. |
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
142978
98.61%25
13.64%1284
16.41%636
15.43%22
-4.35%1
-50%