Ping file system events to any API
- Running Watchman
- YAML Configuration
- Running Watchman as a Service
- Download this Repo
python setup.py install
- Configure the app by running
watchman configure. Or copy the default YAML file to
- From Terminal, run
- From another Terminal, run
watchman sync: Watches over all paths added to
sourcein YAML configuration file
watchman worker: Starts the RQ worker to ping all endpoints added to
endpointsin YAML configuration file
This YAML is automatically created in the
~ directory. It holds all the configuration attributes for Watchman.
source: Array of all paths Watchman should monitor
regexes: Array of all regexes Watchman should abide by (These regexes are matched with the filepath)
endpoints: Hash of each file/folder action which should ping to an API endpoint
source: - /home/users/skcript regexes: - "([a-zA-Z0-9_ -/]*)/home/(\\w+)/uploads/" endpoints: file_create: "http://localhost/api/v2/files/create" folder_create: "http://localhost/api/v2/folders/create" file_move: "http://localhost/api/v2/files/move" folder_move: "http://localhost/api/v2/folders/move" file_destroy: "http://localhost/api/v2/files/destroy" folder_destroy: "http://localhost/api/v2/folders/destroy"
Watchman can ratelimit and selectively prevent your API calls for each file
system event. These are managed in
watchman/extension.py. Each function defined
extension.py takes path (where the file system event occurred) as input.
Watchman can ratelimit your API calls based on a unique string at 100 calls per second.
The unique string is used to group your API calls. Modify the
watchman/extension.py to enable this. By default it returns the
root directory of the path Watchman is watching.
For example, if you are monitoring
/uploads folder which has directories for
each user, like,
ratelimit() to return the username from the path. This way you can
ratelimit API calls based on each user.
Watchman can selectively prevent API calls from being triggered by simply
returning a boolean for each path. Modify the
prevent() function in
watchman/extension.py to enable this.
False and does not prevent any API calls.
Running Watchman as a Service
Watchman can be run as a service in your production environments. Currently, only Linux environments are supported.
watchman_workerto your in
- Create folder
/var/run/watchmanto store pids file
- Create a
/tmpif it is not present already
- Give appropriate permissions to
/tmp(to whichever user Watchman is running from)
To start the service
service watchman_sync start service watchman_worker start
To stop the service
service watchman_sync stop service watchman_worker stop
To restart the service
service watchman_sync restart service watchman_worker restart
All Watchman logs are maintained at
Copyright 2016 Skcript. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Watchman is maintained and funded by Skcript. The names and logos for Skcript are properties of Skcript.
We love open source, and we have been doing quite a bit of contributions to the community. Take a look at them here. Also, encourage people around us to get involved in community operations. Join us, if you'd like to see the world change from our HQ.