{"action":"created","issue":{"url":"https://api.github.com/repos/weewx/weewx/issues/17","repository_url":"https://api.github.com/repos/weewx/weewx","labels_url":"https://api.github.com/repos/weewx/weewx/issues/17/labels{/name}","comments_url":"https://api.github.com/repos/weewx/weewx/issues/17/comments","events_url":"https://api.github.com/repos/weewx/weewx/issues/17/events","html_url":"https://github.com/weewx/weewx/issues/17","id":64100673,"number":17,"title":"implement cron-like report generation","user":{"login":"matthewwall","id":6115213,"avatar_url":"https://avatars.githubusercontent.com/u/6115213?v=3","gravatar_id":"","url":"https://api.github.com/users/matthewwall","html_url":"https://github.com/matthewwall","followers_url":"https://api.github.com/users/matthewwall/followers","following_url":"https://api.github.com/users/matthewwall/following{/other_user}","gists_url":"https://api.github.com/users/matthewwall/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewwall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewwall/subscriptions","organizations_url":"https://api.github.com/users/matthewwall/orgs","repos_url":"https://api.github.com/users/matthewwall/repos","events_url":"https://api.github.com/users/matthewwall/events{/privacy}","received_events_url":"https://api.github.com/users/matthewwall/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/weewx/weewx/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":20,"created_at":"2015-03-24T21:12:32Z","updated_at":"2016-03-02T14:19:08Z","closed_at":null,"body":"Look at Gary's (?) changes to allow cron-like report generation.\r\n\r\n(from the TODO file)"},"comment":{"url":"https://api.github.com/repos/weewx/weewx/issues/comments/191253921","html_url":"https://github.com/weewx/weewx/issues/17#issuecomment-191253921","issue_url":"https://api.github.com/repos/weewx/weewx/issues/17","id":191253921,"user":{"login":"tkeffer","id":3321259,"avatar_url":"https://avatars.githubusercontent.com/u/3321259?v=3","gravatar_id":"","url":"https://api.github.com/users/tkeffer","html_url":"https://github.com/tkeffer","followers_url":"https://api.github.com/users/tkeffer/followers","following_url":"https://api.github.com/users/tkeffer/following{/other_user}","gists_url":"https://api.github.com/users/tkeffer/gists{/gist_id}","starred_url":"https://api.github.com/users/tkeffer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkeffer/subscriptions","organizations_url":"https://api.github.com/users/tkeffer/orgs","repos_url":"https://api.github.com/users/tkeffer/repos","events_url":"https://api.github.com/users/tkeffer/events{/privacy}","received_events_url":"https://api.github.com/users/tkeffer/received_events","type":"User","site_admin":false},"created_at":"2016-03-02T14:19:08Z","updated_at":"2016-03-02T14:19:08Z","body":"I see your point. But, pushing back, a common use case is users with expensive WAN connections. They want to archive data often, but FTP / RSYNC only occasionally. \r\n\r\nI guess there's three places to hook this functionality into:\r\n\r\n1. At the Report level, as I described above. This would help those with expensive WAN connections and would be very simple to implement. Don't see why it would not solve #108.\r\n2. At the generator level. Here you decide whether or not to fire off a generator. This could be done in `StdReportEngine`. This would also be easy to implement. \r\n3. At the individual file / image / FTP / RSYNC level. This seems to be what you're proposing, but, as you're discovering, there's no point of commonality between the various generators that you can hook into. Each generator would have its own implementation of the crontab-like functionality, carefully engineered so they would all have the same semantics. Not including the copy generator is probably ok. \r\n\r\nThe problem with Option 3 is that it is subtly different from the real crontab. If the real crontab finds a match, it goes and does something. By contrast, in our world, we go do something then check to see if it's OK. This requires each \"do something\" facility to do its own checking to see if it's OK. \r\n\r\nI'm rambling.\r\n\r\nSorry, but I have to go... I'll try to finish my thoughts later."}}