Code Monkey home page Code Monkey logo

watchman's Introduction

Watchman

Ping file system events to any API

Dependencies

  • Python 2.7 (Developed and Tested)
  • Redis
  • RQ

Installing

  1. Download this Repo
  2. Run python setup.py install
  3. Configure the app by running watchman configure. Or copy the default YAML file to ~.

Running Watchman

  1. From Terminal, run watchman sync
  2. From another Terminal, run watchman worker

Functions

YAML Configuration

This YAML is automatically created in the ~ directory. It holds all the configuration attributes for Watchman.

Attributes

  • 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

Default File

  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"

Extending

Watchman can ratelimit and selectively prevent your API calls for each file system event. These are managed in watchman/extension.py. Each function defined in extension.py takes path (where the file system event occurred) as input.

Ratelimiting

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 ratelimit() function in 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,

  • /uploads/user1
  • /uploads/user2
  • /uploads/user3

Modify ratelimit() to return the username from the path. This way you can ratelimit API calls based on each user.

Preventing

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.

By default prevent() returns 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.

  1. Download watchman_sync and watchman_worker to your in /etc/init.d folder
  2. Create folder /var/run/watchman to store pids file
  3. Create a /tmp if it is not present already
  4. Give appropriate permissions to /var/run/watchman and /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

Logs

All Watchman logs are maintained at /tmp/watchman.log

License

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.

About

Skcript

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.

watchman's People

Contributors

imkarthikk avatar swaathi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.