inventory-server 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +12 -0
  5. data/Dockerfile +22 -0
  6. data/Dockerfile-passenger +18 -0
  7. data/Dockerfile-unicorn +22 -0
  8. data/Gemfile +4 -0
  9. data/LICENSE.txt +22 -0
  10. data/README.md +32 -0
  11. data/Rakefile +2 -0
  12. data/bin/inventory-server +33 -0
  13. data/circle.yml +26 -0
  14. data/config.ru +8 -0
  15. data/docker/passenger/passenger.conf +15 -0
  16. data/docker/passenger/run-httpd.sh +8 -0
  17. data/docker/unicorn/nginx.conf +45 -0
  18. data/docker/unicorn/run-unicorn.sh +5 -0
  19. data/docker/unicorn/unicorn.conf +31 -0
  20. data/docker/unicorn/unicorn.rb +19 -0
  21. data/fig.yml +18 -0
  22. data/inventory-server.gemspec +45 -0
  23. data/lib/inventory/server.rb +30 -0
  24. data/lib/inventory/server/cli.rb +59 -0
  25. data/lib/inventory/server/config.rb +80 -0
  26. data/lib/inventory/server/email_parser.rb +28 -0
  27. data/lib/inventory/server/http_server.rb +49 -0
  28. data/lib/inventory/server/inventory_error.rb +9 -0
  29. data/lib/inventory/server/loader.rb +60 -0
  30. data/lib/inventory/server/logger.rb +16 -0
  31. data/lib/inventory/server/smtp_server.rb +36 -0
  32. data/lib/inventory/server/version.rb +5 -0
  33. data/plugins/facts_parser.rb +95 -0
  34. data/plugins/index.rb +56 -0
  35. data/plugins/json_schema_validator.rb +33 -0
  36. data/plugins/log_failures_on_disk.rb +35 -0
  37. data/public/.gitignore +0 -0
  38. data/spec/integration/fixtures/facter.xml +4543 -0
  39. data/spec/integration/http_spec.rb +24 -0
  40. data/spec/spec_helper.rb +96 -0
  41. data/spec/unit/cli_spec.rb +54 -0
  42. data/spec/unit/config_spec.rb +65 -0
  43. data/spec/unit/email_parser_spec.rb +53 -0
  44. data/spec/unit/facts_parser_spec.rb +176 -0
  45. data/spec/unit/fixtures/simple_plugin.rb +2 -0
  46. data/spec/unit/http_server_spec.rb +58 -0
  47. data/spec/unit/index_spec.rb +77 -0
  48. data/spec/unit/json_schema_validator_spec.rb +126 -0
  49. data/spec/unit/loader_spec.rb +34 -0
  50. data/spec/unit/log_failures_on_disk_spec.rb +50 -0
  51. data/spec/unit/server_spec.rb +11 -0
  52. data/spec/unit/smtp_server_spec.rb +68 -0
  53. data/tmp/.gitignore +0 -0
  54. metadata +434 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 34cbc8d1572c70edb39377ffa1981fea38a03a21
4
+ data.tar.gz: 423f3ca495ed66887c283618484ce7e1ad9baefa
5
+ SHA512:
6
+ metadata.gz: d73c6ac09d52200f1bd0b332a7e15fdfdd7e79947dec8d1fb3593781a01955834033f8ba03e1086a7a576281fc0eff309a710c6bbb15403c810e12c26f0001ae
7
+ data.tar.gz: 458a1968d101447e15b1dab21d3ade878d720df78975025a60fde4ae268ce429cc1e6723ae10c98288a29930aadaba7cc738665aed62c6bc163832f5a1660083
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ bin
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --tag ~integration
2
+ --color
3
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.0
6
+ - 2.2.0
7
+ gemfile: Gemfile
8
+ script: bundle exec rspec spec
9
+
10
+ addons:
11
+ code_climate:
12
+ repo_token: a1cef56082836d79578a4a84c6da43c7f5854faa03bedd888f795c62ceb2eb84
data/Dockerfile ADDED
@@ -0,0 +1,22 @@
1
+ FROM centos
2
+ MAINTAINER Filirom1 <filirom1@gmail.com>
3
+
4
+ ADD . /app
5
+
6
+ RUN yum install -y epel-release
7
+ RUN yum install -y patch tar git ruby ruby-devel rubygem-bundler make gcc gcc-c++ zlib-devel libxml2-devel nginx
8
+
9
+ RUN cd /app && bundle install
10
+
11
+ RUN cp /app/docker/unicorn/unicorn.conf /etc/nginx/conf.d/unicorn.conf && \
12
+ cp /app/docker/unicorn/nginx.conf /etc/nginx/nginx.conf && \
13
+ echo "daemon off;" >> /etc/nginx/nginx.conf
14
+
15
+ RUN mkdir -p /var/log/inventory && chmod o+rwX /var/log/inventory && \
16
+ mkdir -p /var/lib/inventory/ && chmod o+rwX /var/lib/inventory && \
17
+ mkdir -p /var/run/inventory/ && chmod o+rwX /var/run/inventory
18
+
19
+ VOLUME ["/var/log/nginx", "/var/log/inventory"]
20
+
21
+ EXPOSE 80
22
+ CMD ["/app/docker/unicorn/run-unicorn.sh"]
@@ -0,0 +1,18 @@
1
+ FROM centos
2
+ MAINTAINER Filirom1 <filirom1@gmail.com>
3
+
4
+ ADD . /app
5
+
6
+ RUN yum install -y epel-release
7
+ RUN yum install -y patch tar git ruby ruby-devel rubygem-bundler make gcc gcc-c++ zlib-devel libxml2-devel httpd \
8
+ http://puias.math.ias.edu/data/puias/unsupported/7/x86_64/mod_passenger-4.0.18-9.5.sdl7.x86_64.rpm \
9
+ http://puias.math.ias.edu/data/puias/unsupported/7/x86_64/rubygem-passenger-4.0.18-9.5.sdl7.x86_64.rpm \
10
+ http://puias.math.ias.edu/data/puias/unsupported/7/x86_64/rubygem-passenger-native-4.0.18-9.5.sdl7.x86_64.rpm \
11
+ http://puias.math.ias.edu/data/puias/unsupported/7/x86_64/rubygem-passenger-native-libs-4.0.18-9.5.sdl7.x86_64.rpm
12
+
13
+ RUN cd /app && bundle install
14
+ RUN cp /app/docker/passenger/passenger.conf /etc/httpd/conf.d/passenger.conf
15
+ RUN mkdir -p /var/log/inventory && chmod o+rwX /var/log/inventory
16
+
17
+ EXPOSE 80
18
+ CMD ["/app/docker/passenger/run-httpd.sh"]
@@ -0,0 +1,22 @@
1
+ FROM centos
2
+ MAINTAINER Filirom1 <filirom1@gmail.com>
3
+
4
+ ADD . /app
5
+
6
+ RUN yum install -y epel-release
7
+ RUN yum install -y patch tar git ruby ruby-devel rubygem-bundler make gcc gcc-c++ zlib-devel libxml2-devel nginx
8
+
9
+ RUN cd /app && bundle install
10
+
11
+ RUN cp /app/docker/unicorn/unicorn.conf /etc/nginx/conf.d/unicorn.conf && \
12
+ cp /app/docker/unicorn/nginx.conf /etc/nginx/nginx.conf && \
13
+ echo "daemon off;" >> /etc/nginx/nginx.conf
14
+
15
+ RUN mkdir -p /var/log/inventory && chmod o+rwX /var/log/inventory && \
16
+ mkdir -p /var/lib/inventory/ && chmod o+rwX /var/lib/inventory && \
17
+ mkdir -p /var/run/inventory/ && chmod o+rwX /var/run/inventory
18
+
19
+ VOLUME ["/var/log/nginx", "/var/log/inventory"]
20
+
21
+ EXPOSE 80
22
+ CMD ["/app/docker/unicorn/run-unicorn.sh"]
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in inventory-server.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Filirom1
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # Inventory::Server [![Build Status](https://travis-ci.org/Filirom1/inventory.svg?branch=master)](https://travis-ci.org/Filirom1/inventory) [![Code Climate](https://codeclimate.com/github/Filirom1/inventory/badges/gpa.svg)](https://codeclimate.com/github/Filirom1/inventory) [![Test Coverage](https://codeclimate.com/github/Filirom1/inventory/badges/coverage.svg)](https://codeclimate.com/github/Filirom1/inventory)
2
+
3
+ Inventory server store and index data sent from the agent
4
+
5
+ ## Installation
6
+
7
+ Install `postfix` with the following configuration
8
+
9
+ mydestination = $myhostname, localhost.$mydomain, localhost
10
+ relay_domains = $mydestination
11
+ relayhost = 127.0.0.1:2525
12
+
13
+ Install ElasticSearch
14
+
15
+ Install ruby and bundler
16
+
17
+ Then
18
+
19
+ bundle install
20
+ bundle exec ruby smtp_server.rb
21
+
22
+
23
+ ## Usage
24
+
25
+
26
+ ## Contributing
27
+
28
+ 1. Fork it ( https://github.com/[my-github-username]/inventory-server/fork )
29
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
30
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
31
+ 4. Push to the branch (`git push origin my-new-feature`)
32
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'inventory/server'
4
+ require 'inventory/server/cli'
5
+ require 'inventory/server/logger'
6
+ require 'inventory/server/smtp_server'
7
+
8
+ cli_options = Inventory::Server::CLI.new().parse! ARGV
9
+
10
+ server = Inventory::Server::Server.new(cli_options)
11
+ options = server.config
12
+
13
+ Inventory::Server::InventoryLogger.logger.info "SMTP Server started, listening on #{options[:host]}:#{options[:smtp_port]}"
14
+
15
+ smtp_server = Inventory::Server::SMTPServer.new(options, server.middlewares)
16
+ smtp_server.start
17
+ smtp_server.join
18
+
19
+ BEGIN {
20
+ at_exit {
21
+ if smtp_server
22
+ Inventory::Server::InventoryLogger.logger.info "Server is shutting down gracefully"
23
+ smtp_server.shutdown()
24
+
25
+ unless smtp_server.connections == 0
26
+ Inventory::Server::InventoryLogger.logger.info "Still #{smtp_server.connections} connections, wait 1 seconds"
27
+ sleep 1
28
+ end
29
+
30
+ smtp_server.stop
31
+ end
32
+ }
33
+ }
data/circle.yml ADDED
@@ -0,0 +1,26 @@
1
+ machine:
2
+ services:
3
+ - docker
4
+
5
+ dependencies:
6
+ override:
7
+ - sudo curl -o /usr/local/bin/fig -L https://github.com/docker/fig/releases/download/1.0.1/fig-`uname -s`-`uname -m`
8
+ - sudo chmod +x /usr/local/bin/fig
9
+ - fig build
10
+
11
+ database:
12
+ override:
13
+ - /bin/true
14
+
15
+ test:
16
+ override:
17
+ - fig up -d
18
+ - fig run web cd /app && bundle install
19
+ - fig run web cd /app && bundle exec rspec spec
20
+ - fig run web cd /app && bundle exec rspec spec --tag integration
21
+
22
+ deployment:
23
+ prod:
24
+ branch: master
25
+ commands:
26
+ - curl --data "build=true" -X POST https://registry.hub.docker.com/u/filirom1/inventory/trigger/$DOCKER_HUB_TOKEN/
data/config.ru ADDED
@@ -0,0 +1,8 @@
1
+ require 'sinatra'
2
+ require 'inventory/server'
3
+ require 'inventory/server/http_server'
4
+
5
+ server = Inventory::Server::Server.new({})
6
+ Inventory::Server::HTTPServer.set :config, server.config
7
+ Inventory::Server::HTTPServer.set :middlewares, server.middlewares
8
+ run Inventory::Server::HTTPServer
@@ -0,0 +1,15 @@
1
+ <IfModule mod_passenger.c>
2
+ PassengerRoot /usr/share/gems/gems/passenger-4.0.18/lib/phusion_passenger/locations.ini
3
+ PassengerRuby /usr/bin/ruby
4
+ </IfModule>
5
+
6
+ <VirtualHost *:80>
7
+ ServerName localhost
8
+ DocumentRoot /app/public
9
+ <Directory /app/public>
10
+ Require all granted
11
+ Allow from all
12
+ Options -MultiViews
13
+ </Directory>
14
+ </VirtualHost>
15
+
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ # Make sure we're not confused by old, incompletely-shutdown httpd
4
+ # context after restarting the container. httpd won't start correctly
5
+ # if it thinks it is already running.
6
+ rm -rf /run/httpd/*
7
+
8
+ exec /usr/sbin/apachectl -D FOREGROUND
@@ -0,0 +1,45 @@
1
+ # For more information on configuration, see:
2
+ # * Official English Documentation: http://nginx.org/en/docs/
3
+ # * Official Russian Documentation: http://nginx.org/ru/docs/
4
+
5
+ user nginx;
6
+ worker_processes 1;
7
+
8
+ error_log /var/log/nginx/error.log;
9
+ #error_log /var/log/nginx/error.log notice;
10
+ #error_log /var/log/nginx/error.log info;
11
+
12
+ pid /run/nginx.pid;
13
+
14
+
15
+ events {
16
+ worker_connections 1024;
17
+ }
18
+
19
+
20
+ http {
21
+ include /etc/nginx/mime.types;
22
+ default_type application/octet-stream;
23
+
24
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
25
+ '$status $body_bytes_sent "$http_referer" '
26
+ '"$http_user_agent" "$http_x_forwarded_for"';
27
+
28
+ access_log /var/log/nginx/access.log main;
29
+
30
+ sendfile on;
31
+ #tcp_nopush on;
32
+
33
+ #keepalive_timeout 0;
34
+ keepalive_timeout 65;
35
+
36
+ #gzip on;
37
+
38
+ index index.html index.htm;
39
+
40
+ # Load modular configuration files from the /etc/nginx/conf.d directory.
41
+ # See http://nginx.org/en/docs/ngx_core_module.html#include
42
+ # for more information.
43
+ include /etc/nginx/conf.d/*.conf;
44
+ }
45
+
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ cd /app
4
+ bundle exec unicorn -c /app/docker/unicorn/unicorn.rb -E production -D
5
+ /usr/sbin/nginx
@@ -0,0 +1,31 @@
1
+ # use the socket we configured in our unicorn.rb
2
+ upstream unicorn_server {
3
+ server unix:/var/lib/inventory/unicorn.sock
4
+ fail_timeout=0;
5
+ }
6
+
7
+ # configure the virtual host
8
+ server {
9
+ # replace with your domain name
10
+ server_name localhost;
11
+ # replace this with your static Sinatra app files, root + public
12
+ root /app/public;
13
+ # port to listen for requests on
14
+ listen 80;
15
+ # maximum accepted body size of client request
16
+ client_max_body_size 4G;
17
+ # the server will close connections after this time
18
+ keepalive_timeout 5;
19
+
20
+ location / {
21
+ try_files $uri @app;
22
+ }
23
+
24
+ location @app {
25
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
26
+ proxy_set_header Host $http_host;
27
+ proxy_redirect off;
28
+ # pass to the upstream unicorn server mentioned above
29
+ proxy_pass http://unicorn_server;
30
+ }
31
+ }
@@ -0,0 +1,19 @@
1
+ # set path to app that will be used to configure unicorn,
2
+ # note the trailing slash in this example
3
+ @dir = File.expand_path '../../', File.dirname(__FILE__)
4
+
5
+ worker_processes 2
6
+ working_directory @dir
7
+
8
+ timeout 30
9
+
10
+ # Specify path to socket unicorn listens to,
11
+ # we will use this in our nginx.conf later
12
+ listen "/var/lib/inventory/unicorn.sock", :backlog => 64
13
+
14
+ # Set process id path
15
+ pid "/var/run/inventory/unicorn.pid"
16
+
17
+ # Set log file paths
18
+ stderr_path "/var/log/inventory/unicorn-error.log"
19
+ stdout_path "/var/log/inventory/unicorn.log"
data/fig.yml ADDED
@@ -0,0 +1,18 @@
1
+ web:
2
+ build: .
3
+ links:
4
+ - elasticsearch
5
+ ports:
6
+ - "80:80"
7
+ environment:
8
+ INVENTORY_ES_HOST: http://elasticsearch:9200
9
+ kibana:
10
+ image: bobrik/kibana4:4.0.0-rc1
11
+ ports:
12
+ - 5601:5601
13
+ links:
14
+ - elasticsearch
15
+ environment:
16
+ KIBANA_ES_URL: http://elasticsearch:9200
17
+ elasticsearch:
18
+ image: elasticsearch:1.4.4
@@ -0,0 +1,45 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'inventory/server/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "inventory-server"
8
+ spec.version = Inventory::Server::VERSION
9
+ spec.authors = ["Filirom1"]
10
+ spec.email = ["filirom1@gmail.com"]
11
+ spec.summary = %q{Inventory server store and index data sent from the agent}
12
+ spec.description = %q{Inventory server store and index data sent from the agent}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'midi-smtp-server', '~> 1.1'
22
+ spec.add_dependency 'rest-client', '~> 1.7'
23
+ spec.add_dependency 'gserver', '~> 0.0'
24
+ spec.add_dependency 'mail', '~> 2.6'
25
+ spec.add_dependency 'filum', '~> 2.2'
26
+ spec.add_dependency 'json', '~> 1.8'
27
+ spec.add_dependency 'activesupport', '~> 4.2'
28
+ spec.add_dependency 'libxml-to-hash', '~> 0.2'
29
+ spec.add_dependency 'middleware', '~> 0.1'
30
+ spec.add_dependency 'app_configuration', '~> 0.0'
31
+ spec.add_dependency 'sinatra', '~> 1.4'
32
+ spec.add_dependency 'ensure-encoding', '~> 0.1'
33
+ spec.add_dependency 'json-schema', '~> 2.5'
34
+ spec.add_dependency 'unicorn', '~> 4.8'
35
+
36
+ spec.add_development_dependency "bundler", "~> 1.7"
37
+ spec.add_development_dependency "rake", "~> 10.0"
38
+ spec.add_development_dependency "rack-test", "~> 0.6"
39
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 0.4"
40
+ spec.add_development_dependency "rspec", "~> 3.0"
41
+ spec.add_development_dependency "rspec-mocks", "~> 3.2"
42
+ spec.add_development_dependency "webmock", "~> 1.20"
43
+ spec.add_development_dependency 'thin', '~> 1.6'
44
+ spec.add_development_dependency 'parallel', '~> 1.4'
45
+ end