rest-ftp-daemon 0.2.0 → 0.5.0

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.
data/Gemfile CHANGED
@@ -5,8 +5,6 @@ gem "json"
5
5
 
6
6
  group :development do
7
7
  gem "shoulda", ">= 0"
8
- gem "rdoc", "~> 3.12"
9
8
  gem "bundler", "~> 1.0"
10
9
  gem "jeweler", "~> 2.0.1"
11
- gem "simplecov", ">= 0"
12
10
  end
data/Gemfile.lock CHANGED
@@ -11,7 +11,6 @@ GEM
11
11
  builder (3.2.2)
12
12
  descendants_tracker (0.0.4)
13
13
  thread_safe (~> 0.3, >= 0.3.1)
14
- docile (1.1.5)
15
14
  faraday (0.9.0)
16
15
  multipart-post (>= 1.2, < 3)
17
16
  git (1.2.7)
@@ -62,11 +61,6 @@ GEM
62
61
  shoulda-context (1.2.1)
63
62
  shoulda-matchers (2.6.2)
64
63
  activesupport (>= 3.0.0)
65
- simplecov (0.9.0)
66
- docile (~> 1.1.0)
67
- multi_json
68
- simplecov-html (~> 0.8.0)
69
- simplecov-html (0.8.0)
70
64
  sinatra (1.4.5)
71
65
  rack (~> 1.4)
72
66
  rack-protection (~> 1.4)
@@ -83,7 +77,5 @@ DEPENDENCIES
83
77
  bundler (~> 1.0)
84
78
  jeweler (~> 2.0.1)
85
79
  json
86
- rdoc (~> 3.12)
87
80
  shoulda
88
- simplecov
89
81
  sinatra
data/README.md CHANGED
@@ -14,13 +14,15 @@ As of today, its main features are :
14
14
 
15
15
  This project requires ruby >= 1.9 and rubygems installed.
16
16
 
17
- Furthermore, gems are required to run it:
17
+ Quickly install the gem from rubygems.org:
18
18
 
19
- ``` gem install sinatra ```
19
+ ``` gem install rest-ftp-daemon ```
20
20
 
21
- Starting the daemon:
21
+ Start the daemon:
22
22
 
23
- ``` thin start ```
23
+ ``` rest-ftp-daemon start ```
24
+
25
+ For now, daemon logs to APP_LOGTO defined in lib/config.rb
24
26
 
25
27
 
26
28
  ## Basic usage ##
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.5.0
data/bin/rest-ftp-daemon CHANGED
@@ -2,14 +2,18 @@
2
2
 
3
3
  # Libs and init
4
4
  require 'thin'
5
+
6
+ # Initialize some local constants
5
7
  APP_ROOT = File.dirname(__FILE__) + '/../'
6
- DEFAULT_PORT = 3000
8
+ APP_VER = File.read "#{APP_ROOT}/VERSION"
9
+ APP_STARTED = Time.now
10
+ APP_DEFAULT_PORT = 3000
7
11
 
8
12
  # Prepare thin
9
- rackup_file = File.expand_path "#{APP_ROOT}/lib/rest-ftp-daemon/config.ru"
13
+ rackup_file = File.expand_path "#{APP_ROOT}/lib/config.ru"
10
14
  argv = ARGV
11
15
  argv << ["-R", rackup_file] unless ARGV.include?("-R")
12
- argv << ["-p", DEFAULT_PORT.to_s] unless ARGV.include?("-p")
16
+ argv << ["-p", APP_DEFAULT_PORT.to_s] unless ARGV.include?("-p")
13
17
  argv << ["-e", "production"] unless ARGV.include?("-e")
14
18
 
15
19
  # Start thin
data/lib/config.rb CHANGED
@@ -1,2 +1,7 @@
1
+ # App configuration
2
+ APP_NAME = 'rest-ftp-daemon'
3
+ APP_LOGTO = "/tmp/#{APP_NAME}.log"
4
+
5
+ # Transfer configuration
1
6
  TRANSFER_CHUNK_SIZE = 100000
2
7
  THREAD_SLEEP_BEFORE_DIE = 120
@@ -1,8 +1,6 @@
1
1
  # Main libs
2
2
  require 'sinatra'
3
3
  require 'sinatra/base'
4
- require "sinatra/json"
5
- require "sinatra/config_file"
6
4
  require 'net/ftp'
7
5
  require 'json'
8
6
 
@@ -1,21 +1,20 @@
1
1
  class RestFtpDaemon < Sinatra::Base
2
- helpers Sinatra::JSON
3
2
 
4
3
  # General config
5
4
  configure :development, :production do
6
5
 
7
6
  # Create new thread group
8
7
  @@threads = ThreadGroup.new
9
- #set :dummy, true
10
- # set :sessions, false
8
+
9
+ # Some other configuration
10
+ set :sessions, false
11
11
  # set :logging, true
12
- # set :root, APP_ROOT + '/lib/'
13
12
  end
14
13
 
15
14
  # Server initialization
16
15
  def initialize
17
16
  # Setup logger
18
- @logger = Logger.new(APP_ROOT + '/main.log','daily')
17
+ @logger = Logger.new(APP_LOGTO, 'daily')
19
18
  @logger.level = Logger::INFO
20
19
 
21
20
  # Other stuff
@@ -27,20 +26,30 @@ class RestFtpDaemon < Sinatra::Base
27
26
 
28
27
  # Server global status
29
28
  get "/" do
29
+ # Debug query
30
+ info "GET /"
31
+
32
+ # Build response
30
33
  content_type :json
31
- json get_status
34
+ JSON.pretty_generate get_status
32
35
  end
33
36
 
34
37
  # List jobs
35
38
  get "/jobs" do
39
+ # Debug query
40
+ info "GET /jobs"
41
+
36
42
  # Build response
37
43
  content_type :json
38
- json get_jobs
44
+ JSON.pretty_generate get_jobs
39
45
  #@@threads.count
40
46
  end
41
47
 
42
48
  # List jobs
43
49
  delete "/jobs/:name" do
50
+ # Debug query
51
+ info "DELETE /jobs/#{params[:name]}"
52
+
44
53
  # Kill this job
45
54
  ret = delete_job params[:name]
46
55
 
@@ -49,22 +58,24 @@ class RestFtpDaemon < Sinatra::Base
49
58
 
50
59
  # Build response
51
60
  content_type :json
52
- json nil
61
+ JSON.pretty_generate nil
53
62
  end
54
63
 
55
64
  # Spawn a new thread for this new job
56
65
  post '/jobs' do
66
+ # Extract payload
57
67
  request.body.rewind
58
68
  payload = JSON.parse request.body.read
59
- info "POST / with #{payload.to_json}"
60
69
 
61
- # Spawn a thread
62
- #config = {}
70
+ # Debug query
71
+ info "POST /jobs: #{payload.to_json}"
72
+
73
+ # Spawn a thread for this job
63
74
  result = new_job payload
64
75
 
65
76
  # Build response
66
77
  content_type :json
67
- json result
78
+ JSON.pretty_generate result
68
79
  end
69
80
 
70
81
  protected
@@ -139,13 +150,21 @@ class RestFtpDaemon < Sinatra::Base
139
150
  end
140
151
 
141
152
  def get_status
153
+ info "> get_status"
154
+
142
155
  {
143
- greeting: "REST FTP daemon: up and running",
156
+ app_name: APP_NAME,
157
+ hostname: @@hostname,
158
+ version: APP_VER,
159
+ started: APP_STARTED,
160
+ uptime: (Time.now - APP_STARTED).round(1),
144
161
  jobs_count: @@threads.list.count,
145
162
  }
146
163
  end
147
164
 
148
165
  def get_jobs
166
+ info "> get_jobs"
167
+
149
168
  output = []
150
169
  @@threads.list.each do |thread|
151
170
  output << {
@@ -160,6 +179,8 @@ class RestFtpDaemon < Sinatra::Base
160
179
 
161
180
 
162
181
  def delete_job name
182
+ info "> delete_job(#{name})"
183
+
163
184
  count = 0
164
185
  @@threads.list.collect do |thread|
165
186
  next unless thread[:name] == name
@@ -170,7 +191,7 @@ class RestFtpDaemon < Sinatra::Base
170
191
  end
171
192
 
172
193
  def new_job context = {}
173
- info "new_job: creating thread"
194
+ info "new_job"
174
195
 
175
196
  # Generate name
176
197
  @@last_worker_id +=1
@@ -219,12 +240,8 @@ class RestFtpDaemon < Sinatra::Base
219
240
  return { code: 0, errmsg: 'success', name: name, context: context }
220
241
  end
221
242
 
222
- def log level, msg=""
223
- @logger.send(level.to_s, msg)
224
- end
225
-
226
243
  def info msg=""
227
- log :info, msg
244
+ @logger.send :info, msg
228
245
  end
229
246
 
230
247
  def job_status code, errmsg
@@ -0,0 +1,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "rest-ftp-daemon"
8
+ s.version = "0.5.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Bruno"]
12
+ s.date = "2014-07-31"
13
+ s.description = "A fairly basic FTP client daemon, driven by RESTful webservice calls"
14
+ s.email = "rest-ftp-daemon@bmconseil.com"
15
+ s.executables = ["rest-ftp-daemon"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.md"
19
+ ]
20
+ s.files = [
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "bin/rest-ftp-daemon",
28
+ "lib/config.rb",
29
+ "lib/config.ru",
30
+ "lib/errors.rb",
31
+ "lib/rest-ftp-daemon.rb",
32
+ "rest-ftp-daemon.gemspec",
33
+ "test/helper.rb",
34
+ "test/test_rest-ftp-daemon.rb"
35
+ ]
36
+ s.homepage = "http://github.com/bmedici/rest-ftp-daemon"
37
+ s.licenses = ["MIT"]
38
+ s.require_paths = ["lib"]
39
+ s.rubygems_version = "1.8.23"
40
+ s.summary = "RESTful FTP client daemon"
41
+
42
+ if s.respond_to? :specification_version then
43
+ s.specification_version = 3
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_runtime_dependency(%q<sinatra>, [">= 0"])
47
+ s.add_runtime_dependency(%q<json>, [">= 0"])
48
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
49
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
50
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
51
+ else
52
+ s.add_dependency(%q<sinatra>, [">= 0"])
53
+ s.add_dependency(%q<json>, [">= 0"])
54
+ s.add_dependency(%q<shoulda>, [">= 0"])
55
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
56
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
57
+ end
58
+ else
59
+ s.add_dependency(%q<sinatra>, [">= 0"])
60
+ s.add_dependency(%q<json>, [">= 0"])
61
+ s.add_dependency(%q<shoulda>, [">= 0"])
62
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
63
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
64
+ end
65
+ end
66
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-ftp-daemon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -59,22 +59,6 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: rdoc
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: '3.12'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: '3.12'
78
62
  - !ruby/object:Gem::Dependency
79
63
  name: bundler
80
64
  requirement: !ruby/object:Gem::Requirement
@@ -107,22 +91,6 @@ dependencies:
107
91
  - - ~>
108
92
  - !ruby/object:Gem::Version
109
93
  version: 2.0.1
110
- - !ruby/object:Gem::Dependency
111
- name: simplecov
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
94
  description: A fairly basic FTP client daemon, driven by RESTful webservice calls
127
95
  email: rest-ftp-daemon@bmconseil.com
128
96
  executables:
@@ -140,9 +108,10 @@ files:
140
108
  - VERSION
141
109
  - bin/rest-ftp-daemon
142
110
  - lib/config.rb
111
+ - lib/config.ru
143
112
  - lib/errors.rb
144
113
  - lib/rest-ftp-daemon.rb
145
- - lib/rest-ftp-daemon/config.ru
114
+ - rest-ftp-daemon.gemspec
146
115
  - test/helper.rb
147
116
  - test/test_rest-ftp-daemon.rb
148
117
  homepage: http://github.com/bmedici/rest-ftp-daemon
@@ -160,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
129
  version: '0'
161
130
  segments:
162
131
  - 0
163
- hash: 3830976928581563014
132
+ hash: 613480688316128454
164
133
  required_rubygems_version: !ruby/object:Gem::Requirement
165
134
  none: false
166
135
  requirements: