influence 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,7 @@
1
+ = Summary
2
+
3
+ Client/server app for running apps on remote systems. Designed for automated, remote server deployment.
4
+
5
+ = NOTICE
6
+
7
+ Not ready for use yet. Will be usable in a few days.
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'awesome_print'
4
+ require "#{File.dirname(__FILE__)}/config/startup"
5
+
6
+ task :default do
7
+ end
8
+
9
+ desc "create database influence"
10
+ task "create" do
11
+ cmd = "mysqladmin -u root create influence"
12
+ puts cmd
13
+ system cmd
14
+ end
15
+
16
+ desc "migrate database influence"
17
+ task "migrate" do
18
+ require 'connect'
19
+ Sequel.extension :migration
20
+ Sequel::Migrator.apply(DB, File.join(File.dirname(__FILE__), "db", "migrations"))
21
+ end
22
+
23
+ desc "reset the database influence"
24
+ task "reset" do
25
+ require 'connect'
26
+ Sequel.extension :migration
27
+ Sequel::Migrator.apply(DB, File.join(File.dirname(__FILE__), "db", "migrations"), 0)
28
+ end
data/bin/influence ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'influence'
5
+
6
+ Influence::Server.launch
data/bin/influencer ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'awesome_print'
5
+ require 'socket'
6
+ require 'json'
7
+
8
+ data = {
9
+ :url => 'github.com',
10
+ :action => :install,
11
+ :big1 => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
12
+ :big2 => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
13
+ }
14
+
15
+ server = TCPSocket.open( 'localhost', 4321 )
16
+ server.puts( data.to_json )
17
+ response = server.readline
18
+ ap response
19
+ response = JSON.parse(response)
20
+ ap response
@@ -0,0 +1,21 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:messages) do
4
+ primary_key :id
5
+
6
+ Text :content
7
+ String :influencer_ip
8
+ DateTime :received_at
9
+ DateTime :responded_at
10
+ Integer :result_code
11
+ Text :log
12
+
13
+ DateTime :created_at
14
+ end
15
+ end
16
+
17
+ down do
18
+ drop_table(:messages)
19
+ end
20
+ end
21
+
data/influence.gem ADDED
@@ -0,0 +1,30 @@
1
+ $DEBUG=true
2
+ Gem::Specification.new do |s|
3
+ s.name = "influence"
4
+ s.version = "0.0.0"
5
+ s.platform = Gem::Platform::RUBY
6
+ s.authors = ["Jim Freeze"]
7
+ s.email = ["jimfreeze@gmail.com"]
8
+ s.summary = "Remote deployment server"
9
+ s.description = "Simple Client and Server app to setup and control remote machines. Uses TCP sockets for comm and Sqlite3 for logging. Currently for intranet use due to minimum security features."
10
+ s.rubyforge_project = s.name
11
+ s.date = Time.now
12
+ s.required_rubygems_version = ">= 1.3.6"
13
+
14
+ # If you have runtime dependencies, add them here
15
+ # s.add_runtime_dependency "other", "~> 1.2"
16
+
17
+ # If you have development dependencies, add them here
18
+ # s.add_development_dependency "another", "= 0.9"
19
+
20
+ # The list of files to be contained in the gem
21
+ s.files = `git ls-files`.split("\n")
22
+ s.bindir = 'bin'
23
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
24
+ # s.extensions = `git ls-files ext/extconf.rb`.split("\n")
25
+
26
+ s.require_path = 'lib'
27
+
28
+ # For C extensions
29
+ # s.extensions = "ext/extconf.rb"
30
+ end
@@ -0,0 +1,32 @@
1
+ require 'json'
2
+ require 'message'
3
+
4
+ module Influence
5
+ class Processor
6
+ def initialize(io)
7
+ @io = io
8
+ loop do
9
+ @message = @io.readline
10
+ process
11
+ respond
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ #
18
+ # run_command => command
19
+ # run_remote_command => url
20
+ #
21
+ #
22
+ def process
23
+ @message[:]
24
+ end
25
+
26
+ def respond
27
+ @io.puts({:result => "COMMAND RECEIVED"}.to_json)
28
+ end
29
+
30
+ end#Processor
31
+ end#module
32
+
@@ -0,0 +1,47 @@
1
+ require 'gserver'
2
+
3
+ module Influence
4
+
5
+ class Server < GServer
6
+ DEFAULT_PORT = 4321
7
+
8
+ def initialize(port=DEFAULT_PORT, *args)
9
+ super
10
+ end
11
+
12
+ def self.launch
13
+ @server = new
14
+ @server.audit = true
15
+ @server.start
16
+ @server.join
17
+ end
18
+
19
+ def serve(io)
20
+ Processor.new(io)
21
+ end
22
+
23
+ private
24
+
25
+ def starting
26
+ puts " - Server starts up"
27
+ true
28
+ end
29
+ def connecting( tcp_socket )
30
+ puts " - Before serve #{tcp_socket}"
31
+ # p tcp_socket.methods
32
+ # puts tcp_socket.getsockname
33
+ puts tcp_socket.peeraddr
34
+ puts tcp_socket.addr
35
+ # puts tcp_socket.count
36
+ true
37
+ end
38
+ def disconnecting( client_port )
39
+ puts " - After serve #{client_port}"
40
+ true
41
+ end
42
+ def stopping
43
+ puts " - Server shuts down"
44
+ true
45
+ end
46
+ end#end Class
47
+ end#end module
data/lib/influence.rb ADDED
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ require 'awesome_print'
3
+ require 'influence/server'
4
+ require 'influence/processor'
data/models/message.rb ADDED
@@ -0,0 +1,8 @@
1
+ class Message < Sequel::Model#(DB[:messages])
2
+
3
+ def before_create # or after_initialize
4
+ super
5
+ self.created_at = Time.now.utc
6
+ end
7
+
8
+ end
data/tmp/server.rb ADDED
@@ -0,0 +1,83 @@
1
+ require 'gserver'
2
+
3
+ class EchoServer < GServer
4
+ def initialize(port=4321, *args)
5
+ super
6
+ end
7
+ def serve(io)
8
+ line = io.readline
9
+ io.puts( line )
10
+ end
11
+ end
12
+
13
+ es = EchoServer.new
14
+ es.start
15
+ es.join
16
+ #
17
+ # A server that returns the time in seconds since 1970.
18
+ #
19
+ class TimeServer < GServer
20
+ def initialize(port=10001, *args)
21
+ super(port, *args)
22
+ end
23
+ def serve(io)
24
+ c = rand(10)
25
+ p c
26
+ if c < 5
27
+ x = Time.now.to_s
28
+ puts x
29
+ io.puts(x)
30
+ else
31
+ puts "Hello"
32
+ io.puts("Hello")
33
+ end
34
+ ensure
35
+ io.puts "\n\n"
36
+ end
37
+
38
+ def starting
39
+ puts" – Server starts up"
40
+ true
41
+ end
42
+ def connecting( tcp_socket )
43
+ puts " – Before serve #{tcp_socket}"
44
+ # p tcp_socket.methods
45
+ puts tcp_socket.getsockname
46
+ puts tcp_socket.peeraddr
47
+ puts tcp_socket.addr
48
+ # puts tcp_socket.count
49
+ true
50
+ end
51
+ def disconnecting( client_port )
52
+ puts " – After serve #{client_port}"
53
+ true
54
+ end
55
+ def stopping
56
+ puts " – Server shuts down"
57
+ true
58
+ end
59
+
60
+ end
61
+
62
+ class HelloServer < GServer
63
+ def initialize(port=1234, *args)
64
+ super(port, *args)
65
+ end
66
+ def serve(io)
67
+ io.puts("Hello")
68
+ # io.flush
69
+ end
70
+ end
71
+
72
+ # Run the server with logging enabled (it's a separate thread).
73
+ server = TimeServer.new
74
+ server.audit = true # Turn logging on.
75
+ server.start
76
+
77
+
78
+ hserver = HelloServer.new
79
+ hserver.audit = true
80
+ hserver.start
81
+
82
+ hserver.join
83
+ server.join
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: influence
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.0
6
+ platform: ruby
7
+ authors:
8
+ - Jim Freeze
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-09-11 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Simple Client and Server app to setup and control remote machines. Uses TCP sockets for comm and Sqlite3 for logging. Currently for intranet use due to minimum security features.
18
+ email:
19
+ - jimfreeze@gmail.com
20
+ executables:
21
+ - influence
22
+ - influencer
23
+ extensions: []
24
+
25
+ extra_rdoc_files: []
26
+
27
+ files:
28
+ - README.rdoc
29
+ - Rakefile
30
+ - bin/influence
31
+ - bin/influencer
32
+ - db/migrations/001_create_messages.rb
33
+ - influence.gem
34
+ - lib/influence.rb
35
+ - lib/influence/processor.rb
36
+ - lib/influence/server.rb
37
+ - models/message.rb
38
+ - tmp/server.rb
39
+ has_rdoc: true
40
+ homepage:
41
+ licenses: []
42
+
43
+ post_install_message:
44
+ rdoc_options: []
45
+
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.3.6
60
+ requirements: []
61
+
62
+ rubyforge_project: influence
63
+ rubygems_version: 1.6.1
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: Remote deployment server
67
+ test_files: []
68
+