Git Product home page Git Product logo

sensu-plugins-supervisor's Introduction

Sensu-Plugins-supervisor

Build Status Gem Version Code Climate Test Coverage Dependency Status

Functionality

Files

  • bin/check-supervisor.rb
  • bin/check-supervisor-socket.rb

Usage

Installation

Installation and Setup

Some extra info on a hack regarding xmlrpc

So in ruby 2.4 they removed xmlrpc from stdlib and made it a ruby gem. As this gem is only installable on 2.3 (according to doc but most users report being unable to install in 2.3) this creates problems. On the surface you might think that we could do something like this in the .gemspec:

if RUBY_VERSION >= "2.4"
  installer.install "xmlrpc", "~> 0.3"
end

However this is not something we need evaluated at build time but actually at install time. Ruby does not have a great way of doing this but we can accomplish this by using a c extension to force this behavior at run time. This was based off: http://www.programmersparadox.com/2012/05/21/gemspec-loading-dependent-gems-based-on-the-users-system/

Testing this behavior

I have included 2 dockerfiles to test installing on ruby 2.3 and ruby 2.4.

Building

Ruby 2.2:

$ docker build -f Dockerfile-ruby2.2 .
Sending build context to Docker daemon  221.2kB
Step 1/6 : FROM ruby:2.2-slim
2.2-slim: Pulling from library/ruby
10a267c67f42: Already exists
0aaa89427703: Already exists
4e4351445696: Already exists
72c399ee88ad: Pull complete
cd4fc9895ed7: Pull complete
00facae99acf: Pull complete
Digest: sha256:9f39e5306ac98b6ff46a7f5247ace88b4e3723a3fe04dcfa317cabed07dadd8f
Status: Downloaded newer image for ruby:2.2-slim
 ---> 81e5c2fd16a9
Step 2/6 : RUN mkdir /usr/src/app
 ---> Running in f92de1d4ae5a
 ---> 7e0786e64a4a
Removing intermediate container f92de1d4ae5a
Step 3/6 : ADD . /usr/src/app
 ---> 9d2cb5c24d80
Removing intermediate container e52c9e26d2cc
Step 4/6 : WORKDIR /usr/src/app
 ---> 94d1e262851f
Removing intermediate container 427d79912bd9
Step 5/6 : RUN apt-get update   && apt-get install -y build-essential
 ---> Running in 62819ad68ade
<INTENTIONALLY_REMOVED_OUTPUT_FROM_APT>
 ---> 4ee671ec2163
Removing intermediate container 62819ad68ade
Step 6/6 : CMD ./docker-test
 ---> Running in 25d0d0e45692
 ---> d0339d43c554
Removing intermediate container 25d0d0e45692
Successfully built d0339d43c554

Ruby 2.3:

$ docker build -f Dockerfile-ruby2.3 .
Sending build context to Docker daemon  179.7kB
Step 1/6 : FROM ruby:2.3-slim
 ---> 684863def0d3
Step 2/6 : RUN mkdir /usr/src/app
 ---> Using cache
 ---> e62979ea3e34
Step 3/6 : ADD . /usr/src/app
 ---> 7bbdf2f16ff5
Removing intermediate container bdaf432e06fe
Step 4/6 : WORKDIR /usr/src/app
 ---> b9b014ac62a2
Removing intermediate container 0f9ebd7711ff
Step 5/6 : RUN apt-get update   && apt-get install -y build-essential
 ---> Running in 06d6ce00c56d
<INTENTIONALLY_REMOVED_OUTPUT_FROM_APT>
 ---> 30e212e3dc48
Removing intermediate container 06d6ce00c56d
Step 6/6 : CMD ./docker-test
 ---> Running in a1205ff9acce
 ---> e9e3c5affbc0
Removing intermediate container a1205ff9acce
Successfully built e9e3c5affbc0

Ruby 2.4:

$ docker build -f Dockerfile-ruby2.4 .
Sending build context to Docker daemon  178.2kB
Step 1/6 : FROM ruby:2.4-slim
 ---> 6dd077757d49
Step 2/6 : RUN mkdir /usr/src/app
 ---> Using cache
 ---> 4f45395487f3
Step 3/6 : ADD . /usr/src/app
 ---> fd2af990b369
Removing intermediate container 6b5e7cc4a515
Step 4/6 : WORKDIR /usr/src/app
 ---> f2019fc2ae01
Removing intermediate container d471aea79711
Step 5/6 : RUN apt-get update   && apt-get install -y build-essential
 ---> Running in 3f9106d17a3d
<INTENTIONALLY_REMOVED_OUTPUT_FROM_APT>
 ---> ae1a635f5731
Removing intermediate container 3f9106d17a3d
Step 6/6 : CMD ./docker-test
 ---> Running in ccc8b4be1d08
 ---> 6d927a3f6fd1
Removing intermediate container ccc8b4be1d08
Successfully built 6d927a3f6fd1

Validation

Ruby 2.2:

$ docker run d0339d43c554
WARNING:  pessimistic dependency on ox (~> 2.5.0) may be overly strict
  if ox is semantically versioned, use:
    add_runtime_dependency 'ox', '~> 2.5', '>= 2.5.0'
WARNING:  See http://guides.rubygems.org/specification-reference/ for help
  Successfully built RubyGem
  Name: sensu-plugins-supervisor
  Version: 1.1.0
  File: sensu-plugins-supervisor-1.1.0.gem
Successfully installed mixlib-cli-1.7.0
Successfully installed sensu-plugin-1.4.5
Successfully installed ruby-supervisor-0.0.2
Building native extensions.  This could take a while...
Successfully installed ox-2.5.0
Building native extensions.  This could take a while...
You can use the embedded Ruby by setting EMBEDDED_RUBY=true in /etc/default/sensu
Successfully installed sensu-plugins-supervisor-1.1.0
5 gems installed

Ruby 2.3:

$ docker run e9e3c5affbc0
WARNING:  pessimistic dependency on ox (~> 2.5.0) may be overly strict
  if ox is semantically versioned, use:
    add_runtime_dependency 'ox', '~> 2.5', '>= 2.5.0'
WARNING:  See http://guides.rubygems.org/specification-reference/ for help
  Successfully built RubyGem
  Name: sensu-plugins-supervisor
  Version: 1.1.0
  File: sensu-plugins-supervisor-1.1.0.gem
Successfully installed mixlib-cli-1.7.0
Successfully installed sensu-plugin-1.4.5
Successfully installed ruby-supervisor-0.0.2
Building native extensions.  This could take a while...
Successfully installed ox-2.5.0
Building native extensions.  This could take a while...
You can use the embedded Ruby by setting EMBEDDED_RUBY=true in /etc/default/sensu
Successfully installed sensu-plugins-supervisor-1.1.0
5 gems installed

Ruby 2.4:

$ docker run 6d927a3f6fd1
WARNING:  pessimistic dependency on ox (~> 2.5.0) may be overly strict
  if ox is semantically versioned, use:
    add_runtime_dependency 'ox', '~> 2.5', '>= 2.5.0'
WARNING:  See http://guides.rubygems.org/specification-reference/ for help
  Successfully built RubyGem
  Name: sensu-plugins-supervisor
  Version: 1.1.0
  File: sensu-plugins-supervisor-1.1.0.gem
Building native extensions.  This could take a while...
Successfully installed json-1.8.6
Successfully installed mixlib-cli-1.7.0
Successfully installed sensu-plugin-1.4.5
Successfully installed ruby-supervisor-0.0.2
Building native extensions.  This could take a while...
Successfully installed ox-2.5.0
Building native extensions.  This could take a while...
You can use the embedded Ruby by setting EMBEDDED_RUBY=true in /etc/default/sensu
Successfully installed sensu-plugins-supervisor-1.1.0
6 gems installed

Notes

sensu-plugins-supervisor's People

Contributors

analytically avatar cwjohnston avatar dependabot-support avatar eheydrick avatar goriparthi avatar hany avatar luxifer avatar majormoses avatar mjulian avatar nhooey avatar rajasaur avatar sstarcher avatar stefan-walluhn avatar tas50 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sensu-plugins-supervisor's Issues

v1.0.2 broken on ruby2.2 and ruby2.3

We are picking up the latest release and it's broken on ruby2.2 and ruby2.3 on ubuntu 16.04

---- Begin output of /usr/bin/gem install sensu-plugins-supervisor -q --no-rdoc --no-ri -v "1.0.2" --source=https://www.rubygems.org ----
    STDOUT: Building native extensions.  This could take a while...
    STDERR: ERROR:  Error installing sensu-plugins-supervisor:
    	ERROR: Failed to build gem native extension.

        /usr/bin/ruby2.2 -r ./siteconf20170602-10640-1jy0la.rb extconf.rb
    checking for expat.h... yes
    checking for XML_ParserCreate() in -lexpat... yes
    checking for XML_SetNotStandaloneHandler()... yes
    checking for XML_SetParamEntityParsing()... yes
    checking for XML_SetDoctypeDeclHandler()... yes
    checking for XML_ParserReset()... yes
    checking for XML_SetSkippedEntityHandler()... yes
    checking for XML_GetFeatureList()... yes
    checking for XML_UseForeignDTD()... yes
    checking for XML_GetIdAttributeIndex()... yes
    checking for ntohl() in -lsocket... no
    creating Makefile

    make "DESTDIR=" clean

    make "DESTDIR="
    compiling xmlparser.c
    In file included from /usr/include/ruby-2.2.0/ruby.h:33:0,
                     from xmlparser.c:44:
    xmlparser.c: In function ‘iterStartElementHandler’:
    xmlparser.c:231:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:231:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterEndElementHandler’:
    xmlparser.c:257:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:257:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterCharacterDataHandler’:
    xmlparser.c:272:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:272:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterProcessingInstructionHandler’:
    xmlparser.c:287:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:287:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterDefaultHandler’:
    xmlparser.c:303:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:303:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterUnparsedEntityDeclHandler’:
    xmlparser.c:324:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:324:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterNotationDeclHandler’:
    xmlparser.c:348:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:348:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterCommentHandler’:
    xmlparser.c:398:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:398:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterStartCdataSectionHandler’:
    xmlparser.c:411:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:411:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterEndCdataSectionHandler’:
    xmlparser.c:423:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:423:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterStartNamespaceDeclHandler’:
    xmlparser.c:437:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:437:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterEndNamespaceDeclHandler’:
    xmlparser.c:452:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:452:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterStartDoctypeDeclHandler’:
    xmlparser.c:479:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:479:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterEndDoctypeDeclHandler’:
    xmlparser.c:499:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:499:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterElementDeclHandler’:
    xmlparser.c:551:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:551:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterAttlistDeclHandler’:
    xmlparser.c:573:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:573:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterXmlDeclHandler’:
    xmlparser.c:597:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:597:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterEntityDeclHandler’:
    xmlparser.c:625:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:625:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘iterSkippedEntityHandler’:
    xmlparser.c:695:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:695:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myStartElementHandler’:
    xmlparser.c:716:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:716:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myEndElementHandler’:
    xmlparser.c:737:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:737:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myCharacterDataHandler’:
    xmlparser.c:748:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:748:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myProcessingInstructionHandler’:
    xmlparser.c:759:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:759:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myDefaultHandler’:
    xmlparser.c:771:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:771:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myDefaultExpandHandler’:
    xmlparser.c:783:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:783:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myUnparsedEntityDeclHandler’:
    xmlparser.c:798:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:798:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myNotationDeclHandler’:
    xmlparser.c:815:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:815:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myCommentHandler’:
    xmlparser.c:852:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:852:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myStartCdataSectionHandler’:
    xmlparser.c:861:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:861:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myEndCdataSectionHandler’:
    xmlparser.c:869:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:869:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myStartNamespaceDeclHandler’:
    xmlparser.c:879:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:879:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myEndNamespaceDeclHandler’:
    xmlparser.c:890:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:890:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myNotStandaloneHandler’:
    xmlparser.c:901:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:901:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myStartDoctypeDeclHandler’:
    xmlparser.c:922:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:922:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myEndDoctypeDeclHandler’:
    xmlparser.c:940:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:940:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myElementDeclHandler’:
    xmlparser.c:955:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:955:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myAttlistDeclHandler’:
    xmlparser.c:970:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:970:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myXmlDeclHandler’:
    xmlparser.c:986:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:986:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myEntityDeclHandler’:
    xmlparser.c:1005:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:1005:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘myUnknownEncodingHandler’:
    xmlparser.c:1299:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:1299:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘mySkippedEntityHandler’:
    xmlparser.c:1355:14: warning: passing argument 1 of ‘rb_data_object_get’ makes integer from pointer without a cast [-Wint-conversion]
       GET_PARSER(recv, parser);
                  ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1051:41: note: in definition of macro ‘Data_Get_Struct’
         ((sval) = (type*)rb_data_object_get(obj))
                                             ^
    xmlparser.c:1355:3: note: in expansion of macro ‘GET_PARSER’
       GET_PARSER(recv, parser);
       ^
    /usr/include/ruby-2.2.0/ruby/ruby.h:1204:1: note: expected ‘VALUE {aka long unsigned int}’ but argument is of type ‘void *’
     rb_data_object_get(VALUE obj)
     ^
    xmlparser.c: In function ‘XMLParser_parse’:
    xmlparser.c:1783:2: error: format not a string literal and no format arguments [-Werror=format-security]
      rb_raise(eXMLParserError, (char*)errStr);
      ^
    xmlparser.c:1806:16: warning: implicit declaration of function ‘ENC_TO_ENCINDEX’ [-Wimplicit-function-declaration]
           if ((int)ENC_TO_ENCINDEX(enc) != rb_ascii8bit_encindex()) {
                    ^
    xmlparser.c:1832:5: error: format not a string literal and no format arguments [-Werror=format-security]
         rb_raise(eXMLParserError, (char*)errStr);
         ^
    cc1: some warnings being treated as errors
    Makefile:238: recipe for target 'xmlparser.o' failed
    make: *** [xmlparser.o] Error 1

    make failed, exit code 2
``

got an issue when trying to use plugin

When I do from command line as a root, then everything seems to be fine:

check-supervisor-socket.rb

CheckSupervisorSocket OK: All processes running
As soon as I start sensu with plugin I've got following error in output:
CheckSupervisorSocket CRITICAL: Tried to access UNIX domain socket /var/run/supervisor.sock but failed

-u and -p options are not a solution as far as you use ssh key for authorization

XMLParser issue after Sensu 0.29 upgrade and embedded ruby 2.4.0

Hi Guys,

I upgraded today sensu omnibus package to 0.29 and it upgraded ruby gems 2.4.0.

Error:

> /opt/sensu/embedded/bin/check-supervisor-socket.rb -s /tmp/supervisord.sock
> CheckSupervisorSocket CRITICAL: Tried requesting XMLRPC 'supervisor.getAllProcessInfo' from UNIX domain socket /tmp/supervisord.sock but failed: uninitialized constant XMLRPC::XMLParser::XMLStreamParser
> Did you mean?  XMLRPC::XMLParser::LibXMLStreamParser

Fix:

Edit: /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-supervisor-1.0.0/bin/check-supervisor-socket.rb

Change Line 93 which is

success, result = XMLRPC::XMLParser::XMLStreamParser.new.parseMethodResponse(response.body)

to

success, result = XMLRPC::XMLParser::LibXMLStreamParser.new.parseMethodResponse(response.body)

It works as expected then. Sorry didn't had the time to open pull request for this.

Dependabot can't resolve your Ruby dependency files

Dependabot can't resolve your Ruby dependency files.

As a result, Dependabot couldn't update your dependencies.

The error Dependabot encountered was:

Bundler::VersionConflict with message: Bundler could not find compatible versions for gem "bundler":
  In Gemfile:
    bundler (~> 1.7)

  Current Bundler version:
    bundler (2.2.15)

Your bundle requires a different version of Bundler than the one you're running.
Install the necessary version with `gem install bundler:1.17.3` and rerun bundler using `run.rb _1.17.3_`

If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.

View the update logs.

New release

Is it possible to issue a new release on rubygem? Thanks in advance

Show all Fatal processes instead of the first one

Hi,
Thanks for the plugin and helps nicely with monitoring supervisor processes.

In my cases, I have many processes that are managed by supervisor and it seems like this is stopping at the first FATAL and returning that to the sensu server (The "critical" string seems to be returned at the first process that failed). It might be helpful to loop through everything and give the processes that dint meet the mentioned state.

Thanks!

request: support process groups

We run various things grouped together in supervisord so when this plugin fires the output looks like

CheckSupervisorSocket CRITICAL: 00 not running: STOPPED

If #{process['group']}: could be conditionally added it would make the output much clearer:

CheckSupervisorSocket CRITICAL: syncserverbeta_rq_worker:00 not running: STOPPED

Thanks!

Missing xmlparser

After installing the plugin using the plugin mgr I am getting this error:
[root@XXXX bin]# /opt/sensu/embedded/bin/ruby /opt/sensu/embedded/bin/check-supervisor-socket.rb -s /tmp/supervisor.sock Check failed to run: cannot load such file -- xmlparser, ["/opt/sensu/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require'", "/opt/sensu/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require'", "/opt/sensu/embedded/lib/ruby/2.3.0/xmlrpc/parser.rb:608:in initialize'", "/opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugins-supervisor-1.0.0/bin/check-supervisor-socket.rb:93:in new'", "/opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugins-supervisor-1.0.0/bin/check-supervisor-sock

tried adding this gem: libxml-xmlrpc no change to the error output.

Is there an expected OS pkg missing? Is the plugin not listing a dependency?

check-supervisor-socket.rb returning empty output

Not sure what's going on here, but for some reason the check-supervisor-socket.rb check is returning an empty output when run. The status code is correct, but output is blank for some reason:

{"timestamp":"2015-12-23T04:19:36.940716+0000","level":"info","message":"received check request","check":{"name":"supervisord_program_status","issued":1450844377,"command":"check-supervisor-socket.rb"}}
{"timestamp":"2015-12-23T04:19:37.680621+0000","level":"info","message":"publishing check result","payload":{"client":"prod-data-graph-01.cs6d6cloud.internal","check":{"name":"supervisord_program_status","issued":1450844377,"command":"check-supervisor-socket.rb","executed":1450844376,"duration":0.739,"output":"","status":0}}}

Anyone else run into this before?

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.