{"_id":"haraldops","_rev":"58-9f8b98ea9ddc19008d03e60bfc7ba41f","name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","dist-tags":{"latest":"0.1.10"},"versions":{"0.0.7":{"name":"haraldops","description":"operations mail and up-monitoring functions","version":"0.0.7","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"git://github.com/haraldrudell/haraldutil.git","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.7","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"a956761ecf4bd08deb2524d6faf32561fead1118","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.7.tgz","integrity":"sha512-2ziZ3q4gmI30QUTsiupYYGk1GUtkYlocU4TaLnO3L2KjHZF5F4kQ4JNdZtj0rOZq/r3SWet4kxGVCpe/AEEkVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB1pQ86ExlY3p/254fY3lIuSo6rZnU0b+OcaRAjB6C37AiA4S/dM3RGa9lDnQ9E5bgMI/orHUHzrGgW9ogk4/0CZqA=="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.8":{"name":"haraldops","description":"operations mail and up-monitoring functions","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.8","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"git://github.com/haraldrudell/haraldutil.git","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.8","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"0287cb263ad4d694ff4352e886bd78ecb758cb0a","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.8.tgz","integrity":"sha512-LJFdtYo+p8ASurrTXABCWHSCDVwtUQIIddTXPlsnC9R5pDjwkxRRbU4Em7wt11xAMh+mfH/kXIH/KV+2YZBTFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDw0kwlFawVcyQegxk8sf8EKO4KOsFa4nx1IKyOhqouAIhAMDcbjBUDtBuUJpTfFFZXRreAzDWOKiZL/XXH32VjmT0"}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.9":{"name":"haraldops","description":"operations mail and up-monitoring functions","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.9","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"git://github.com/haraldrudell/haraldutil.git","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.9","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"a8e14e61f1166cf7b783f9badbae947fed66d0ef","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.9.tgz","integrity":"sha512-RTpz5mAmdbujo0LDoyOmZRjxuDHsanLJz2f+iNedocfNrkia40yM3dXVI3SnXGLSmXzN5UrrNqmvz4l4Mi1wMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpXisp+UHv+ekRC0M9DPlCQvWLtzhQ3NfQKGWtGnBLnQIhANX3El/ZiLS2KxFyYTU+q2G8lZwbVbidXJZsAtrwNJks"}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.10":{"name":"haraldops","description":"operations mail and up-monitoring functions","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.10","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"git://github.com/haraldrudell/haraldutil.git","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.10","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"d5f2af5405549366129a74d5bcf9981a1bcf384e","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.10.tgz","integrity":"sha512-7QGMu1w/4EFKlWEqdmV/Oy9QVP6ZLY36RAF74WrZa7HygBXpj5a90dofomappQVLzK6yVYolYNxzw173QQOWug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGlH+Od1sR0wWbgv8YOLDcqyu3n1xNzfXXJe8NXddxOAAiEAqUH1E1MCtLq7nYGxUCORhRMvSIyEMny1zp1sazjcq+s="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.11":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.11","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.11","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"349309ff777f175f97f642181f3da9260e18d737","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.11.tgz","integrity":"sha512-wn/l3yvbDu79a5JftZO6rO44hU9UPSMiCSuUCe7rpBY8SPSNu0ucu9+DT1H0g8T/SBpebcFGmHC59+eGo1T1gA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjt0Dfz0bynws8Qf7+vef1g5LKpIk4m4CwcV6GSlUSUAiBCVqM8C/c6bNWeUTn4zXtJV2ZyNBcte84TrCku/zXQzw=="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.12":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.12","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.12","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"dfa504987bdb39c1a13e57f6ef7158db1e372eb1","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.12.tgz","integrity":"sha512-PMjJV11cv2sJcw5UGyze0wLKBZdKRFDAdVAF81auamyiDtgkm0TmSRomCD8ErsE5fslnOCA2cW4ywBf78zNyzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeoMNiqXKo5sttmnSFl7otcSH8AQmprmvxJZbYZFk0dAIhAOBm5A858Yy6DHBtHu4N6W3kw1kGDUz7KoZi0Deqy6VH"}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.14":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.14","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.14","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"c80b5ff3630524f61f4ca21b480f0ef8f0dd2fe8","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.14.tgz","integrity":"sha512-CFNhlOmJ5BpOCw6kPKE2w25NkdL57zOf3iSQGMymD4B0ykU0K/rVvD+paQHutCRquV9I829LxfGodNi4aSOZZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGKVTCrFf8+wCst82ZLMx4rbI7CSFDNSWESELauDRcZgIhAOTA0Ecfbspf8AqVDHPDsHNAiL0O+9iZp2iK+qLleRTc"}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.15":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.15","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/ops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.15","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"28989f700621cecd39cce12017307e4a3ad38a20","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.15.tgz","integrity":"sha512-nnPRuOVH0pU+YvDD7Bvij2dK3GA4AwLMCN41CWX9mFOYsitBW6KJgGjkxmvtXlSSm5pwR1icqZfFf0gP8NCbrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpBcapRBvaG+VGK4z7eviM0psXvY1Wk51mpeBmfJEnxQIhAKelbAAlki+wwfMoBSNMNr39mLNzRoRR2By6plurtgwK"}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.16":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.16","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.16","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"fd838c1ac331a75e6f4d79815a1744f4fb08795f","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.16.tgz","integrity":"sha512-Fn/5KB56K0tAdsmFCFc5VzcpbupcDbriK8P7gaK2uLV3h2DWyC+wKL7jxthvam+ejv7crHcCwGFMxQzjU6dHfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfl0ESPKYPQJmBk5YH42EbkMmvq9m2fS1keD7PaWDQRAiA7mZAhRentKot6Zpp+VnwlTgcqAPWXSz8GazEUXly1Ew=="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.17":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.17","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.17","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"89e7e531f11ec9ddc87adec5fe716f31b19e5cdc","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.17.tgz","integrity":"sha512-0LIibhsH1H3c3nno365qAsxPW8Pvfy1m/0AshdBB4uEPBE8g7Sl1NSHRDiDOFSDn0ejIioPz+FUzy+pX1xmSBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfcz/y3b2nrLTJXjZCg9IwMBscBkDAHQphe5YK9k5KpAiEAhgk/J3K56g2YfHN7PeC8mWeP8r8wkUD8kO1N7NuPl0E="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.19":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.19","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.19","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"6fb96269a9d46715d95140c93ce8eb436693d17a","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.19.tgz","integrity":"sha512-f+cS7kF4q59zpISx3UkuYooXoahHrupkZZfUQ9fQITM4dmmy6SM41KGOHDGVVZSXMIf7Eiqepduj/wtGmPf+Pw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1WAqrnx9HKNbWSDUpdqozQ71mcK1Ro9KEDbUGiZpQjAiEAvHNpOmV+WGMUo7ONcWycRZmyaCEvZPn9agP3ZzuiTxs="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.20":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.20","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.20","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"2cf934aedd203b0fd11ab97eb03cc1bcfef616f2","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.20.tgz","integrity":"sha512-5//syuLGloN8/P+npTL7YZvG4ejjDW1/IYwp9j9e1kFt5Zyz7uXi6BsCa5I+k5/mnjmJ/ME5v4Lf2+qxAGk32g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDKAT8slElwgKP0W1C/ipJIUpumHoUYMjtY3ynu7YiOAiEA107RgoMXKhMb7W3FIKwXQAvZo6tX/TdK4qGWPC07QOo="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.21":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.21","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.21","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"d42d6c16ad3175f5ed7972525e9057bc8cbe10a5","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.21.tgz","integrity":"sha512-Sn4/VUg12z9aOWLlP4qJwUoAn0SO2cvv4p4mg9mk/ZqzZNsllmwp6dRcnkI3EBYqyGpgLwEkqBO6o3R5oPgkMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICRJ9gyu8UIlOxdP4wWX+BsYZoQXlo8l7ghu9oj+kxnLAiEA/2fNDUgBtYmKo/vmnfGb+clm3f3rrSHIPr77VtvKQLA="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.22":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.22","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.22","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"9f30a248d797cb9511e5992ab39068538d23f268","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.22.tgz","integrity":"sha512-0VOS/3NUKKNoCREwRHkvEINCBlTt1XH6OoizQjSpzXuYEe3Bo2cFO5BVCFg7CN1tzqOYMp6claVv8EPAIp9pEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDS7DIjjKvGS82WcQWhN8M7lHnSDUyj9eg3EeGRoOynFAiB44CO1ch0O4xGGdU+b5JZzFUMMjB01SrGnR+A8UIl6PQ=="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.23":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.23","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.23","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"6fa2709c760d64a117dc3a354486d8c6eee71e5a","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.23.tgz","integrity":"sha512-0q9smryjy9HOJHOprq85YlDA6EtFlb5wSbNAmtk/WirPut86VikR9YJ7D95UqMeyjMsQOfGFyMyTd0Z5NVaQGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/tKwjtQOyI9nZlCNsbjkOS01GfP0BFP+QSz3J5UesVAiEA2l13N5b/V5jF0kB5iUtG39cQH0iXTXqb2dyx/1oyBho="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.0.24":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.0.24","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/init","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.0.24","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"2e9381c82f689213ef5d43ea1821effb0f3ec027","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.0.24.tgz","integrity":"sha512-OxD6olCIM0Qh3aM3bGotz1gNJpXrKfgCipvfBRVVjzMlt4kDTSxjp1aoJt993nkgYdjwArL41SPI/JiENnumzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIADo/6cftEJ76/sWGJCIEw1mSS0myohgkPXkoojlIQzYAiEA6Js5gaS8nEeZvz/0eZK6YGyGL6BYORUZUUj8VMiBncs="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.0":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"version":"0.1.0","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.1.0","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"4e6bd39042bf229576fec9648ac7006c8cb25d74","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.0.tgz","integrity":"sha512-L9TcYw5fU1dyfjMeZcEVlwAFOhF08dkVt8DjXoIBHuBKwmLDScy8QAsc7o8TwReHNbzL78wthN05sBzc/miHeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrPumak39ZevjpXamKQkYHoUMxRowq94Fpogmf2R47twIgBK00kwEjaF4bZddMfH6Ik3UEo8olXe20LSw9pAbqIzw="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.1":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.1","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"dependencies":{"haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"git://github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"_id":"haraldops@0.1.1","devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"0c2a6de10d9e45b5716fdf83871fb1e700279034","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.1.tgz","integrity":"sha512-tkvApKBUIi4XbX1w5gLK6FLEu8+mUaw3zYKpZVlqcH8u7I01tHIYv+XWgvxGTd/6de5BZRIzyGOfXySHsvKntQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGK/ekhEOoU2qWM12vPZh6Lwk3s7Av6uPmDfALNwxbapAiBYDSEqBiE1ASt62n7yzRIA/gBWVC2v+GdEG3gl4vatZA=="}]},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.2":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.2","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":""},"dependencies":{"greatjson":"","haraldutil":"","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.2","dist":{"shasum":"43f6c28e1ede64d65faacc5ca6d9716ed0c859bf","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.2.tgz","integrity":"sha512-p+63EG977CaDiLEdLThn6JYJwDktLs6+mHwQKcGgDbvD+XrIuoTXFkBnvm+Sop1TU/qbnIMM4RVOTLi65IJQ6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA17DGpMQMBOCaLsvEbbeFlOrcLXoGmdhIZBrVPL09C2AiEAlVYSOuFXflUMtk5Vv6usA4MAJcigyhuBCCF6hRC4yc4="}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.3":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.3","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.3","dist":{"shasum":"63580070cab424d165195a227f3f97350f48dd68","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.3.tgz","integrity":"sha512-ylwJ5eB1LSRk+K4Smu/Pw8rjiEW5fWXKp7GGPehMmbU+1XCC3DChD8OiNA41p9To+YYSygym/Yhezv/0OXKAFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpYNCM0fKAI9LUttk7psn9tm9O18+QyzB9E9Lk0Ffu0gIgfuvALq8mJEsP/RtXNftdqkNDo3qfvLFkbC8MlH4Qisw="}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.4":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.4","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.4","dist":{"shasum":"da6ebf4307dc0d7d2c553297dcd55b9cb79ff182","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.4.tgz","integrity":"sha512-cak38a4sFhPG+kWPj3JNp4JMC5lGYWzvm1xvDL8WlTZU+7cZomifsN/wKvIT3sfpTWrOBYh6gfezv2PQAA0QvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWhQ7le327khivbST4CUN3eBCxM+iUdLDecwYNLZ0dcAiEA3Sbhw45lGaQWmdzvcH+J43Nzsr5oqA0X21WK9Alj79Q="}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.5":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.5","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.5","dist":{"shasum":"dbbe4940dd495b47ea77c6ef2afd3c68ad6238eb","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.5.tgz","integrity":"sha512-nRhTW1DSEsX2AQdcs+qdbNgqmvTdPlQTj/e6uYz/kwRnuvTOpEtZaqx/KbHKUWs8xvceIrG6xEMELZrfKcF9Fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMHNfhdt4d9V2pg2SP5xpnCSiaFoh5Cgfm+4I+F2FOLwIhAK9x/qpwhj3RoBq9h/xhaB9u0w3fjODT4uxMu0H0A0gZ"}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.6":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.6","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.6","dist":{"shasum":"5b965849938fe3052497c4a29585ee5284bd7448","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.6.tgz","integrity":"sha512-13JhjigCKmqbxJuTApDMXPzh668eMeUmwDQhLTlwVqRLsEAwKvawc2qN3jt30dDSJaNBj1QzNBdNHJBXAwAjIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/swjfezSBha+ZvHZbny60r1AHGju+juIupSKmEfQacAIgQE4ZHoDUmsn6VqbYGXL32XGUcxTA1TCOGgUWwbMjmtY="}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.7":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.7","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.7","dist":{"shasum":"4ca00ca46e04b87550b8c1769839da8cada81ca6","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.7.tgz","integrity":"sha512-nT9OstP/glVDng4aK3hiXt6cCo4XJTVYB8bym8cIadV81P1mgwo7ZG8fNNUKoRsOFXholITSSwouhh6tKgWgmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1MXIU3T/b5fPcWmZFSM6aLqUrfosw/7fKuKBw56n50gIhAIm/8AarRPjfLCb62av6E5hvWasPxyjWnHOU+ypY3JVB"}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.8":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.8","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.8","dist":{"shasum":"508a9cdbda8ac1a3f6366c42ca43235fa8c44b7d","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.8.tgz","integrity":"sha512-NBT02NuuBwVFBWXvlQKAU0UK2LPSzCmX8g4/IzrHicXODs1Ndz7TAi+OyDYcARvqvWLSiNX3PL52OiHrHMQufw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCE2au1itNgwqPz3ZMj96wTprLXhKZMCw19Jt4ImfTV4wIgV34NjG/Kc1OL9juXgvZwk4mng+dKt4nKiJJnltCpATQ="}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.9":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.9","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n\n## Benefits\n\n1. Configure the apps in json from outside its source tree\n2. Single-line setup of operations details\n3. Email communications from your apps\n4. Monitor incoming requests with user agent string and origin\n5. Capture console output with log file output, rotate, and error stack traces\n6. Self-monitor by having multiple deployments monitor each other as well as external apps and Web locations\n7. Portably find function-specific folders and access the system browser\n8. Load app-specific json data from configurable out-of-source tree locations\n\n## Features\n\n1. Flexible loading of out-of-source tree json data\n2. Email service wrapping various implementations including gmail\n3. Configurable heartbeat pinger-responder\n4. Express request logging\n5. stdout to file management\n5. OS portability layer\n\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","_id":"haraldops@0.1.9","dist":{"shasum":"c595b01242280248453bb2b045e35195092462db","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.9.tgz","integrity":"sha512-Qi6eARBANm0FmkaBLw0oufi4GdNePWc2naNg97axEYA+mcqzF/WXfX2FOe2WobMnJP+9S4efbBUFReWjJsBndA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEK/5znA52ERE2dkCkAvNaMyyFeCiJrwYYqMSTkkB7GvAiEAn5UypWYrM1Z6Duo+UYaw4VS5wMp2RwXunpsluHSY8yE="}]},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]},"0.1.10":{"name":"haraldops","description":"Functions for operation, notification and provisioning by Harald Rudell","author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"keywords":["operations","email","notification"],"version":"0.1.10","contributors":[{"name":"Harald Rudell","email":"harald@allgoodapps.com","url":"http://blog.haraldrudell.com"}],"devDependencies":{"mochawrapper":">= 0.0.31"},"dependencies":{"greatjson":">= 0.0.8","haraldutil":">= 0.1.5","nodemailer":">= 0.3","request":">= 0.0.1"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"main":"./lib/haraldops","scripts":{"test":"mocha --ui exports --reporter spec","monitor":"mocha --ui exports --reporter min --watch","debugtest":"mocha --debug-brk --ui exports --reporter spec","coverage":"mochacoverage"},"readme":"# haraldops\nFacilitates configuration, operation and service notifications for node.js applications\n\n## Benefits\n\n1. Configure the apps in json from outside its source tree\n2. Single-line setup of operations details\n3. Email communications from your apps\n4. Monitor incoming requests with user agent string and origin\n5. Capture console output with log file output, rotate, and error stack traces\n6. Self-monitor by having multiple deployments monitor each other as well as external apps and Web locations\n7. Portably find function-specific folders and access the system browser\n8. Load app-specific json data from configurable out-of-source tree locations\n\n## Features\n\n1. Flexible loading of out-of-source tree json data\n2. Email service wrapping various implementations including gmail\n3. Configurable heartbeat pinger-responder\n4. Express request logging\n5. stdout to file management\n5. OS portability layer\n\n# Usage\n## Loading per-machine configuration\n```js\nvar defaults = require('haraldops').init({appName: 'Node.js #3'})\n```\n* Derives a filesystem friendly app identifier a-z0-9, in this case 'nodejs3'\n* Looks for a .json file by this name  in $HOME/apps, $HOME or the folder the executing app is deployed to.\n* Loads the json and configures accordingly\n\nThe following values are known to be present in the returned object:\n* defaults.init.appName: string Name of the application eg. 'Node.js #3'\n* defaults.init.identifier: string Identifier to use eg. 'nodejs3'\n* defaults.init.appFolder: string Path to the apps folder eg. '/home/user/folder'\n* defaults.init.tmpFolder: string Path to a suitable temporary folder eg. '/home/user/tmp' or '/tmp'\n* defaults.init.homeFolder string Path to user's home folder eg. '/home/user'\n* defaults.init.logger function configured logging function\n\nThese top-level properties affects init:\n* logger: function, optional: log to this function, default is console.log\n* appName: string, optional: app name used, default is the name of the folder where the executing app is\n* identifier: string, optional: identifier used when locating settings files, default is derived from appName\n* NoFile: boolean, optional: if present and true, no file is loaded\n\nOther properties are copied to the return value object\n\nProperties loaded from file override those provided in argument\n\n# Examples\n\n## Sending Mail\nusing argument object:\n```js\nvar defaults = require('haraldops').init({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t},\n\tnoFile: true,\n})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\nUsing a configuration file godo.json:\n```js\n{\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t}\n\t}\n}\n```\n\n```js\nvar defaults = require('haraldops').init({appName: 'Go Do'})\ndefaults.init.ops.sendMail('subject', 'body')\n```\n\n## Sample Configuration File\n```js\n{\n\t\"PORT\": 3000,\n\t\"haraldops\": {\n\t\t\"mailsend\": {\n\t\t\t\"user\": \"sender@gmail.com\",\n\t\t\t\"pass\": \"password\",\n\t\t\t\"to\": \"recipient@gmail.com\"\n\t\t},\n\t\t\"responder\": \"/status\",\n\t\t\"identifier\": \"thisapp\",\n\t\t\"pingers\": [\n\t\t\t{\n\t\t\t\t\"title\": \"Make sure Google is up\",\n\t\t\t\t\"url\": \"http://www.google.com/\",\n\t\t\t\t\"isPingerList\": false\t\t\t\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"title\": \"Another deployment\",\n\t\t\t\t\"url\": \"http://www.example.com/status\",\n\t\t\t\t\"app\": \"monitoredappidentifier\"\n\t\t\t}\n\t\t]\n\t},\n\t\"fbAppSecret\": \"55555\",\n\t\"appInterface\": \"localhost\",\n\t\"sessionSecret\": \"verygreat\",\n\t\"ignoreUris\": [\n\t\t\"/status\",\n\t\t\"/favicon.ico\",\n\t\t\"regexp:/images.*\",\n\t\t\"regexp:/stylesheets.*\",\n\t\t\"regexp:/javascripts.*\"\n\t]\n}\n```\n\n## Monitoring of Google\nWill send email if Google does not respond for 5 minutes\n```js\nvar ops = require('haraldops').opsconstructor({\n\tharaldops: {\n\t\tmailsend: {\n\t\t\tuser: 'sender@gmail.com',\n\t\t\tpass: 'password',\n\t\t\tto: 'recipient@gmail.com',\n\t\t},\n\t\tpingers: [\n\t\t\t{\n\t\t\t\ttitle: \"Google\",\n\t\t\t\turl: \"http://google.com\",\n\t\t\t\tisPingerList: false\n\t\t\t}\n\t\t]\n\t},\n\tnoFile: true,\t\n})\n```\n\n# Configuration Reference\n\n* haraldops.errorstack: true: adds\n* haraldops.logFile: '/tmp/x': copies console output to the provided file\n* haraldops.logRotate: 'day': period of rotation minute hour day month year\n\n# Function Reference\n\n## logrequest(logger, ignoreTheseUris)\n```js\nvar haraldops = require('haraldops')\nvar ignoreUris = [\n\t'/status', '/favicon.ico', /\\/images.*/,\n\t/\\/stylesheets.*/, /\\/javascripts.*/,\n]\napp = express.createServer()\napp.configure(function(){\n\tapp.use(haraldops.logrequest(console.log, ignoreUris))\n...\n```\nLogs incoming requests. Handles load-balancer forwarding.\n\n* logger: a function that prints a single string argument\n* ignoreTheseUris a string, a regexp or an array of those types: do not log these requests\n\noutput: Time stamp, request method, host, client and user agent string\n```\n2012-05-16T23:11Z GET http://localhost:3000/ 127.0.0.1:53169 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5\n```\n\n## defaults.init.ops.sendMail(subject, body)\nSend mail using the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.closeMail()\nCloses mail when all pending messages has been sent. Function property of the object returned by opsconstructor or mailconstructor.\n\n## defaults.init.ops.responder(app, url)\n```js\nvar haraldops = require('haraldops')\nvar o = {\n\tuser: 'sender@gmail.com', pass: 'secret', to: 'me@gmail.com',\n\tresponder: '/status'\n}\nvar opsObject = haraldops.opsconstructor(console.log, o)\nvar app = express.createServer()\nopsObject.responder(app, o.responder)\n```\n* app a server from connect or express\n* url a uri where server status is provided, eg. '/status'\n\n## defaults.init.ops.pinger(optsArg)\n* optsArg\n\t* title: the printable name of the server being checked eg. 'My box'\n\t* url: the url for that server, eg. 'http://server.com/status'\n\t* period (optional, default 300): the number of seconds between each check\n\t* isPingerList (optional, default yes): if true the entire response is examined for times and consistency. If false, the response has to be error free and have status code 200\n\t* app the expected app identifier at that url\n\n## defaults.init.ops.shutDown()\nDeactivates the opsObject\n\n## loadDefaultFile()\nLoads ~/haraldops.json and returns the json object\n","readmeFilename":"readme.md","_id":"haraldops@0.1.10","dist":{"shasum":"069149e0f14819a4735d71703a5629eacb6ab9b1","tarball":"https://registry.npmjs.org/haraldops/-/haraldops-0.1.10.tgz","integrity":"sha512-mvCDZldj3513K4DpEtm7td8NtEoGwrVY4+z24FotQ3jhU3Bjs08faFMmopMzq6cMPbpDSiEY7ur0nkun0zXN+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGQbIlvMLhEIr9TDwqypeGmItfoKXsiuLdQXqYRBng08AiBmO/0xM90JPvUJewEjshMrX98Eep7QbxW1gisVUw/pvw=="}]},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"haraldrudell","email":"harald@therudells.com"},"maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}]}},"readme":"","maintainers":[{"name":"haraldrudell","email":"harald@therudells.com"}],"time":{"modified":"2022-06-18T19:20:50.125Z","created":"2012-04-15T05:26:02.314Z","0.0.7":"2012-04-15T05:26:03.854Z","0.0.8":"2012-04-20T21:24:51.868Z","0.0.9":"2012-04-21T01:33:09.148Z","0.0.10":"2012-04-21T04:28:15.662Z","0.0.11":"2012-05-09T17:36:56.024Z","0.0.12":"2012-05-16T23:30:27.137Z","0.0.14":"2012-05-16T23:31:12.731Z","0.0.15":"2012-05-16T23:37:59.299Z","0.0.16":"2012-05-24T22:52:17.838Z","0.0.17":"2012-05-24T23:33:48.660Z","0.0.19":"2012-05-24T23:40:06.967Z","0.0.20":"2012-05-25T00:30:17.972Z","0.0.21":"2012-05-25T01:11:34.009Z","0.0.22":"2012-05-25T01:48:01.545Z","0.0.23":"2012-06-20T01:25:14.168Z","0.0.24":"2012-06-23T20:21:38.949Z","0.1.0":"2012-07-24T04:56:25.735Z","0.1.1":"2012-07-24T05:17:17.129Z","0.1.2":"2012-08-31T23:21:01.727Z","0.1.3":"2012-09-04T02:17:25.627Z","0.1.4":"2012-09-04T04:07:21.412Z","0.1.5":"2012-09-06T15:11:49.063Z","0.1.6":"2012-09-12T16:15:55.282Z","0.1.7":"2012-09-18T19:35:29.971Z","0.1.8":"2012-09-20T13:33:55.966Z","0.1.9":"2012-12-25T08:29:39.719Z","0.1.10":"2013-03-09T20:19:31.788Z"},"repository":{"type":"git","url":"https://haraldrudell@github.com/haraldrudell/haraldops.git"},"author":{"name":"Harald Rudell","email":"harald@allgoodapps.com"},"users":{"fgribreau":true}}