Code Monkey home page Code Monkey logo

particle-agent's Introduction

Particle Agent Build Status

This program supervises the Particle firmware executable running on Raspberry Pi.

Installing

Install the particle-agent Debian package by running this command on your Raspberry Pi:

bash <( curl -sL https://particle.io/install-pi )

Architecture

Particle Agent is a Ruby application. The logic lives inside

The Agent service is an executable that runs as a background service (daemon). The agent service executable is <bin/particle-agent-service> and does things like command line parsing. It delegates to the Daemon class to manage a PID file, a log file and fork the process to the background.

The logic for the agent is in the Agent class. It finds which firmware executables should run and runs them in their own process, restarting them if they stop.

The service description for the Agent service is a System V init script in <debian/particle-agent.init>.

Manually Installing the service

FIXME: These instructions may not apply anymore

sudo cp debian/particle-agent.init /etc/init.d
sudo ln -s $PWD/bin/particle-agent-service /usr/bin/particle-agent-service
sudo insserv particle-agent

After updating the init script run:

sudo systemctl daemon-reload

Note: update-rc.d is deprecated. Use insserv instead.

Interacting with the service

Starting

sudo service particle-agent start

Stopping

sudo service particle-agent stop

See what's running

sudo service particle-agent status

View logs

cat /var/log/particle-agent.log

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests.

TODO: the following may not be accurate.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/particle-iot/particlepi.

Building a Debian package

Prerequisites:

  • gem2deb
  • Make sure rbenv or RVM shims (Ruby version managers) are not in your path

If gem is released to RubyGem, run

gem2deb -p particle-agent particle-agent

Or build the gem locally

gem build *.gemspec
gem2deb -p particle-agent *.gem

Development notes

Communicate with child processes https://www.rubytapas.com/2016/06/16/episode-419-subprocesses-part-4-redirection/

input, output = IO.pipe

pid = Process.spawn "exec", "arg", out: output

Process.waitpid(pid)
input.close
input.read
rd, wr = IO.pipe

if fork
  wr.close
  puts "Starting read"
  puts "Parent got: <#{rd.read}>"
  rd.close
  Process.wait
else
  rd.close
  sleep 1
  puts "Sending message to parent"
  wr.write "Hi Dad"
  wr.close
end

Trap SIGCHLD when child exits https://www.rubytapas.com/2016/06/30/episode-423-subprocesses-part-5-sigchld/

trap("CHLD") do
  pid = Process.waitpid(-1)
  pids[pid] = :done
end

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.