influence 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +7 -0
- data/Rakefile +28 -0
- data/bin/influence +6 -0
- data/bin/influencer +20 -0
- data/db/migrations/001_create_messages.rb +21 -0
- data/influence.gem +30 -0
- data/lib/influence/processor.rb +32 -0
- data/lib/influence/server.rb +47 -0
- data/lib/influence.rb +4 -0
- data/models/message.rb +8 -0
- data/tmp/server.rb +83 -0
- metadata +68 -0
data/README.rdoc
ADDED
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
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
data/models/message.rb
ADDED
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
|
+
|