femtows 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +5 -0
- data/README.md +69 -0
- data/VERSION +1 -0
- data/bin/femtows.bat +2 -0
- data/bin/femtows.sh +1 -0
- data/demo.rb +33 -0
- data/femtows.gemspec +30 -0
- data/femtows.log +7876 -0
- data/gitc.bat +20 -0
- data/guidemo.rb +63 -0
- data/lib/femtows.rb +256 -0
- metadata +58 -0
data/CHANGELOG.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Femtows : femto sized web server
|
2
|
+
## Presentation
|
3
|
+
|
4
|
+
The tiny web server ...
|
5
|
+
230 Lines of code.
|
6
|
+
|
7
|
+
Build to be embedded in any ruby application, test/debug/admin access...
|
8
|
+
|
9
|
+
## Install
|
10
|
+
|
11
|
+
```bash
|
12
|
+
gem install femtows
|
13
|
+
```
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
> ruby -rfemtows -e "cliweb()"
|
19
|
+
> ruby -rfemtows -e "cliweb(8080,'/tmp')"
|
20
|
+
or
|
21
|
+
> femtows.bat
|
22
|
+
# femtows.sh
|
23
|
+
```
|
24
|
+
|
25
|
+
Embedded:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
# server all file in current dir and .info request :
|
29
|
+
|
30
|
+
$ws=WebserverRoot.new(8080,"/tmp","femto ws",10,300, {})
|
31
|
+
|
32
|
+
$ws.serve("/info") {|p|
|
33
|
+
[200,".html", "Femto demo<hr><a href='/'>site</a><hr>#{$ws.to_table(p)}" ]
|
34
|
+
}
|
35
|
+
```
|
36
|
+
|
37
|
+
## API
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
WebserverRoot.new(
|
41
|
+
port_http, # server http port (>1024 on posix, if not root)
|
42
|
+
root-dir, # only one file root. indexed by defalut
|
43
|
+
ws_name, # name in trace & index title
|
44
|
+
10,300, # watch too long connection: every 10 secondes,
|
45
|
+
# kill session which have started from more than 300 seconds
|
46
|
+
{} # options. only one, for logg events , see demo.rb
|
47
|
+
)
|
48
|
+
```
|
49
|
+
|
50
|
+
Servelet receive params hash which content :
|
51
|
+
|
52
|
+
- all http header, with key upercase, prefixed with 'HEAD-'
|
53
|
+
- http parameters (?a=b&...)
|
54
|
+
|
55
|
+
Exemple : http://localhost:9980/info?aa=bb&cc=dd, give with p.to_a.inspect:
|
56
|
+
|
57
|
+
```
|
58
|
+
["aa", "bb"]
|
59
|
+
["cc", "dd"]
|
60
|
+
["HEAD-HOST", "localhost:9980"]
|
61
|
+
["HEAD-USER-AGENT", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"]
|
62
|
+
["HEAD-ACCEPT", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]
|
63
|
+
["HEAD-ACCEPT-LANGUAGE", "fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3"]
|
64
|
+
["HEAD-ACCEPT-ENCODING", "gzip, deflate"]
|
65
|
+
["HEAD-CONNECTION", "keep-alive"]
|
66
|
+
```
|
67
|
+
## License
|
68
|
+
|
69
|
+
LGPL
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.2.0
|
data/bin/femtows.bat
ADDED
data/bin/femtows.sh
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby -rfemtows -e "cliweb()" &
|
data/demo.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative "lib/femtows.rb"
|
2
|
+
|
3
|
+
##################### mini log
|
4
|
+
|
5
|
+
$loggs= Queue.new
|
6
|
+
$file_log="femtows.log"
|
7
|
+
def logger(name="",adr="",*res)
|
8
|
+
mess= "%s | %-10s|%15s | %s" % [Time.now.strftime("%Y-%m-%d %H:%M:%S"),name,adr,res.join(" ")]
|
9
|
+
($loggs.size<1000) ? $loggs.push(mess) : puts(mess)
|
10
|
+
true
|
11
|
+
end
|
12
|
+
Thread.new do
|
13
|
+
loop do
|
14
|
+
sleep 10
|
15
|
+
if $loggs.size>0
|
16
|
+
File.open($file_log,"a") { |f| f.puts( $loggs.pop ) while $loggs.size>0 }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
########################### main
|
22
|
+
|
23
|
+
Thread.abort_on_exception = false
|
24
|
+
BasicSocket.do_not_reverse_lookup = true
|
25
|
+
|
26
|
+
$ws=WebserverRoot.new(ARGV[0].to_i,".","femto ws",10,300, {
|
27
|
+
"logg" => proc {|*par| logger(*par) }
|
28
|
+
})
|
29
|
+
$ws.serve("/info") {|p|
|
30
|
+
[200,".html", "Femto demo<hr><a href='/'>site</a><hr>#{$ws.to_table(p)}" ]
|
31
|
+
}
|
32
|
+
|
33
|
+
sleep
|
data/femtows.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push('lib')
|
3
|
+
require "ruiby/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "femtows"
|
7
|
+
s.version = File.read("VERSION").strip
|
8
|
+
s.date = Time.now.to_s.split(/\s+/)[0]
|
9
|
+
s.email = "regis.aubarede@gmail.com"
|
10
|
+
s.homepage = "http://github.com/raubarede/femtows"
|
11
|
+
s.authors = ["Regis d'Aubarede"]
|
12
|
+
s.summary = "a tiny webserver"
|
13
|
+
s.description = <<'EEND'
|
14
|
+
a tiny web server, for local file transfert,
|
15
|
+
embededded, http experimentations
|
16
|
+
EEND
|
17
|
+
|
18
|
+
|
19
|
+
s.files = Dir['**/*']
|
20
|
+
s.test_files = Dir['samples/**']
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
s.executables = `ls bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
|
24
|
+
## Make sure you can build the gem on older versions of RubyGems too:
|
25
|
+
s.rubygems_version = "1.8.15"
|
26
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
27
|
+
s.specification_version = 3 if s.respond_to? :specification_version
|
28
|
+
|
29
|
+
end
|
30
|
+
|