I second Till conditional comments.
- Otherwise, I wouldn't throw an exception for the ping() method, because non-response to a ping request is not an exception per-se for a method that's specifically called to check on the status. I think a "return false" would be more appropriate. (unless this is more of a keep-alive type of method, in which case "keepAlive()" would be a better name IMO.)
- Shouldn't queueAdd()'s $penalty get a NULL as default value?
- startMonitor() is not throwing an exception on non-"Success"