rsence-pre 2.1.0.1.pre
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/.yardopts +10 -0
- data/INSTALL.rdoc +330 -0
- data/LICENSE.txt +622 -0
- data/README.rdoc +98 -0
- data/VERSION +1 -0
- data/bin/rsence +25 -0
- data/bin/rsence-pre +25 -0
- data/conf/default_conf.yaml +346 -0
- data/conf/default_strings.yaml +76 -0
- data/conf/rsence_command_strings.yaml +444 -0
- data/docs/ExampleGuiPlugin.rdoc +193 -0
- data/docs/JavascriptBundles.rdoc +0 -0
- data/docs/PluginBundleInfo.rdoc +173 -0
- data/docs/PluginBundles.rdoc +96 -0
- data/docs/Values.rdoc +163 -0
- data/js/comm/autosync/autosync.js +17 -0
- data/js/comm/autosync/js.inc +0 -0
- data/js/comm/comm.js +203 -0
- data/js/comm/js.inc +0 -0
- data/js/comm/jsloader/js.inc +0 -0
- data/js/comm/jsloader/jsloader.js +112 -0
- data/js/comm/queue/js.inc +0 -0
- data/js/comm/queue/queue.js +184 -0
- data/js/comm/session/js.inc +0 -0
- data/js/comm/session/session.js +52 -0
- data/js/comm/sessionwatcher/js.inc +0 -0
- data/js/comm/sessionwatcher/sessionwatcher.js +44 -0
- data/js/comm/transporter/js.inc +0 -0
- data/js/comm/transporter/transporter.js +261 -0
- data/js/comm/urlresponder/js.inc +0 -0
- data/js/comm/urlresponder/urlresponder.js +149 -0
- data/js/comm/values/js.inc +0 -0
- data/js/comm/values/values.js +433 -0
- data/js/controls/button/button.js +72 -0
- data/js/controls/button/js.inc +0 -0
- data/js/controls/button/themes/bright/button.css +89 -0
- data/js/controls/button/themes/bright/button.html +7 -0
- data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/bright/button_parts1.png +0 -0
- data/js/controls/button/themes/default/button.css +89 -0
- data/js/controls/button/themes/default/button.html +7 -0
- data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/default/button_parts1.png +0 -0
- data/js/controls/checkbox/checkbox.js +49 -0
- data/js/controls/checkbox/js.inc +0 -0
- data/js/controls/checkbox/themes/default/checkbox.css +69 -0
- data/js/controls/checkbox/themes/default/checkbox.html +5 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
- data/js/controls/dialogs/alert_sheet/alert_sheet.js +63 -0
- data/js/controls/dialogs/alert_sheet/js.inc +0 -0
- data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +37 -0
- data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/sheet.js +84 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
- data/js/controls/imageview/imageview.js +109 -0
- data/js/controls/imageview/js.inc +0 -0
- data/js/controls/imageview/themes/default/blank.gif +0 -0
- data/js/controls/passwordcontrol/js.inc +0 -0
- data/js/controls/passwordcontrol/passwordcontrol.js +23 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
- data/js/controls/progress/progressbar/js.inc +0 -0
- data/js/controls/progress/progressbar/progressbar.js +40 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
- data/js/controls/progress/progressindicator/js.inc +0 -0
- data/js/controls/progress/progressindicator/progressindicator.js +44 -0
- data/js/controls/radiobutton/js.inc +0 -0
- data/js/controls/radiobutton/radiobutton.js +43 -0
- data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
- data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
- data/js/controls/sliders/slider/js.inc +0 -0
- data/js/controls/sliders/slider/slider.js +357 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
- data/js/controls/sliders/slider/themes/default/slider.css +108 -0
- data/js/controls/sliders/slider/themes/default/slider.html +5 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
- data/js/controls/sliders/vslider/js.inc +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
- data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
- data/js/controls/sliders/vslider/vslider.js +41 -0
- data/js/controls/stepper/js.inc +0 -0
- data/js/controls/stepper/stepper.js +213 -0
- data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
- data/js/controls/stepper/themes/default/stepper.css +14 -0
- data/js/controls/stepper/themes/default/stepper.html +2 -0
- data/js/controls/stepper/themes/default/stepper.png +0 -0
- data/js/controls/stringview/js.inc +0 -0
- data/js/controls/stringview/stringview.js +49 -0
- data/js/controls/stringview/themes/default/stringview.css +8 -0
- data/js/controls/stringview/themes/default/stringview.html +1 -0
- data/js/controls/tab/js.inc +0 -0
- data/js/controls/tab/tab.js +280 -0
- data/js/controls/tab/themes/bright/tab.css +76 -0
- data/js/controls/tab/themes/bright/tab.html +6 -0
- data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
- data/js/controls/tab/themes/default/tab.css +77 -0
- data/js/controls/tab/themes/default/tab.html +6 -0
- data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_parts1.png +0 -0
- data/js/controls/textarea/js.inc +0 -0
- data/js/controls/textarea/textarea.js +24 -0
- data/js/controls/textarea/themes/default/textarea.css +21 -0
- data/js/controls/textarea/themes/default/textarea.html +18 -0
- data/js/controls/textcontrol/js.inc +0 -0
- data/js/controls/textcontrol/textcontrol.js +374 -0
- data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
- data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
- data/js/controls/uploader/js.inc +0 -0
- data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
- data/js/controls/uploader/themes/default/uploader.css +108 -0
- data/js/controls/uploader/themes/default/uploader.html +27 -0
- data/js/controls/uploader/uploader.js +154 -0
- data/js/controls/validatorview/js.inc +0 -0
- data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
- data/js/controls/validatorview/themes/default/validator.png +0 -0
- data/js/controls/validatorview/themes/default/validatorview.css +0 -0
- data/js/controls/validatorview/themes/default/validatorview.html +0 -0
- data/js/controls/validatorview/validatorview.js +62 -0
- data/js/controls/window/js.inc +0 -0
- data/js/controls/window/themes/default/window.css +219 -0
- data/js/controls/window/themes/default/window.html +17 -0
- data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_active.png +0 -0
- data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
- data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_buttons.png +0 -0
- data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts1.png +0 -0
- data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts2.png +0 -0
- data/js/controls/window/window.js +286 -0
- data/js/core/class/class.js +318 -0
- data/js/core/class/js.inc +0 -0
- data/js/core/elem/elem.js +1383 -0
- data/js/core/elem/js.inc +0 -0
- data/js/core/event/event.js +153 -0
- data/js/core/event/js.inc +0 -0
- data/js/core/iefix/ie_css_element.htc +5 -0
- data/js/core/iefix/ie_css_style.htc +5 -0
- data/js/core/iefix/iefix.js +359 -0
- data/js/core/iefix/js.inc +0 -0
- data/js/core/rsence_ns/js.inc +0 -0
- data/js/core/rsence_ns/rsence_ns.js +21 -0
- data/js/datetime/calendar/calendar.js +198 -0
- data/js/datetime/calendar/js.inc +0 -0
- data/js/datetime/calendar/themes/default/calendar.css +108 -0
- data/js/datetime/calendar/themes/default/calendar.html +9 -0
- data/js/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
- data/js/datetime/datetimevalue/datetimevalue.js +247 -0
- data/js/datetime/datetimevalue/js.inc +0 -0
- data/js/datetime/timesheet/js.inc +0 -0
- data/js/datetime/timesheet/themes/default/timesheet.css +30 -0
- data/js/datetime/timesheet/themes/default/timesheet.html +2 -0
- data/js/datetime/timesheet/timesheet.js +183 -0
- data/js/datetime/timesheet_item/js.inc +0 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
- data/js/datetime/timesheet_item/timesheet_item.js +248 -0
- data/js/datetime/timesheet_item_edit/js.inc +0 -0
- data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
- data/js/foundation/application/application.js +208 -0
- data/js/foundation/application/js.inc +0 -0
- data/js/foundation/control/control.js +339 -0
- data/js/foundation/control/controldefaults/controldefaults.js +56 -0
- data/js/foundation/control/controldefaults/js.inc +0 -0
- data/js/foundation/control/dummyvalue/dummyvalue.js +51 -0
- data/js/foundation/control/dummyvalue/js.inc +0 -0
- data/js/foundation/control/dyncontrol/dyncontrol.js +500 -0
- data/js/foundation/control/dyncontrol/js.inc +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
- data/js/foundation/control/eventresponder/eventresponder.js +750 -0
- data/js/foundation/control/eventresponder/js.inc +0 -0
- data/js/foundation/control/js.inc +0 -0
- data/js/foundation/control/valuematrix/js.inc +0 -0
- data/js/foundation/control/valuematrix/valuematrix.js +135 -0
- data/js/foundation/control/valueresponder/js.inc +0 -0
- data/js/foundation/control/valueresponder/valueresponder.js +79 -0
- data/js/foundation/eventmanager/eventmanager.js +991 -0
- data/js/foundation/eventmanager/js.inc +0 -0
- data/js/foundation/geom/point/js.inc +0 -0
- data/js/foundation/geom/point/point.js +202 -0
- data/js/foundation/geom/rect/js.inc +0 -0
- data/js/foundation/geom/rect/rect.js +651 -0
- data/js/foundation/json_renderer/js.inc +0 -0
- data/js/foundation/json_renderer/json_renderer.js +246 -0
- data/js/foundation/system/js.inc +0 -0
- data/js/foundation/system/system.js +381 -0
- data/js/foundation/thememanager/js.inc +0 -0
- data/js/foundation/thememanager/thememanager.js +393 -0
- data/js/foundation/value/js.inc +0 -0
- data/js/foundation/value/value.js +183 -0
- data/js/foundation/view/js.inc +0 -0
- data/js/foundation/view/markupview/js.inc +0 -0
- data/js/foundation/view/markupview/markupview.js +114 -0
- data/js/foundation/view/morphanimation/js.inc +0 -0
- data/js/foundation/view/morphanimation/morphanimation.js +237 -0
- data/js/foundation/view/view.js +1812 -0
- data/js/foundation/view/viewdefaults/js.inc +0 -0
- data/js/foundation/view/viewdefaults/viewdefaults.js +26 -0
- data/js/lists/checkboxlist/checkboxlist.js +171 -0
- data/js/lists/checkboxlist/js.inc +0 -0
- data/js/lists/listitems/js.inc +0 -0
- data/js/lists/listitems/listitems.js +88 -0
- data/js/lists/propertylist/js.inc +0 -0
- data/js/lists/propertylist/propertylist.js +326 -0
- data/js/lists/radiobuttonlist/js.inc +0 -0
- data/js/lists/radiobuttonlist/radiobuttonlist.js +116 -0
- data/js/util/reloadapp/js.inc +0 -0
- data/js/util/reloadapp/reloadapp.js +152 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
- data/js/util/sha/js.inc +0 -0
- data/js/util/sha/sha.js +426 -0
- data/js/views/centerview/centerview.js +75 -0
- data/js/views/centerview/js.inc +0 -0
- data/js/views/inlineview/inlineview.js +15 -0
- data/js/views/inlineview/js.inc +0 -0
- data/js/views/scrollview/js.inc +0 -0
- data/js/views/scrollview/scrollview.js +40 -0
- data/lib/conf/argv.rb +850 -0
- data/lib/conf/default.rb +219 -0
- data/lib/daemon/daemon.rb +387 -0
- data/lib/daemon/sigcomm.rb +64 -0
- data/lib/http/broker.rb +150 -0
- data/lib/http/rackup.rb +91 -0
- data/lib/http/request.rb +66 -0
- data/lib/http/response.rb +65 -0
- data/lib/plugins/dependencies.rb +285 -0
- data/lib/plugins/gui_plugin.rb +160 -0
- data/lib/plugins/guiparser.rb +123 -0
- data/lib/plugins/plugin.rb +438 -0
- data/lib/plugins/plugin_base.rb +162 -0
- data/lib/plugins/plugin_plugins.rb +81 -0
- data/lib/plugins/plugin_sqlite_db.rb +98 -0
- data/lib/plugins/pluginmanager.rb +635 -0
- data/lib/plugins/plugins.rb +169 -0
- data/lib/plugins/servlet.rb +108 -0
- data/lib/rsence.rb +32 -0
- data/lib/session/msg.rb +327 -0
- data/lib/session/sessionmanager.rb +522 -0
- data/lib/session/sessionstorage.rb +340 -0
- data/lib/transporter/transporter.rb +263 -0
- data/lib/util/gzstring.rb +9 -0
- data/lib/util/ruby19_fixes.rb +18 -0
- data/lib/values/hvalue.rb +378 -0
- data/lib/values/valuemanager.rb +172 -0
- data/plugins/client_pkg/client_pkg.rb +157 -0
- data/plugins/client_pkg/info.yaml +25 -0
- data/plugins/client_pkg/lib/client_pkg_build.rb +561 -0
- data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
- data/plugins/client_pkg/lib/client_pkg_serve.rb +218 -0
- data/plugins/index_html/img/loading.gif +0 -0
- data/plugins/index_html/img/riassence.gif +0 -0
- data/plugins/index_html/index_html.rb +120 -0
- data/plugins/index_html/info.yaml +18 -0
- data/plugins/index_html/tmpl/index.html +15 -0
- data/plugins/main/info.yaml +18 -0
- data/plugins/main/js/main.js +84 -0
- data/plugins/main/main.rb +255 -0
- data/plugins/main/values.yaml +8 -0
- data/plugins/ticket/info.yaml +21 -0
- data/plugins/ticket/lib/common.rb +392 -0
- data/plugins/ticket/lib/favicon.rb +39 -0
- data/plugins/ticket/lib/file.rb +58 -0
- data/plugins/ticket/lib/img.rb +50 -0
- data/plugins/ticket/lib/objblob.rb +66 -0
- data/plugins/ticket/lib/rsrc.rb +34 -0
- data/plugins/ticket/lib/upload.rb +236 -0
- data/plugins/ticket/ticket.rb +333 -0
- data/setup/welcome/gui/welcome.yaml +92 -0
- data/setup/welcome/info.yaml +13 -0
- data/setup/welcome/text/welcome.html +9 -0
- data/setup/welcome/values.yaml +9 -0
- data/setup/welcome/welcome.rb +54 -0
- metadata +407 -0
data/lib/conf/argv.rb
ADDED
@@ -0,0 +1,850 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2010 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
# Includes the Signal Communication utility.
|
10
|
+
# Used to respond via special PID files in the run directory of the environment
|
11
|
+
require 'daemon/sigcomm'
|
12
|
+
|
13
|
+
|
14
|
+
module RSence
|
15
|
+
|
16
|
+
# @private Returns true, if platform fully supports POSIX standard signals.
|
17
|
+
def self.pid_support?
|
18
|
+
# true for non-windows
|
19
|
+
return (not ['i386-mingw32','x86-mingw32'].include?(RUBY_PLATFORM))
|
20
|
+
end
|
21
|
+
|
22
|
+
# @private ARGVParser is the "user interface" as a command-line argument parser.
|
23
|
+
# It parses the command-line arguments and sets up things accordingly.
|
24
|
+
class ARGVParser
|
25
|
+
|
26
|
+
# The RSence version string, read from the VERSION file in
|
27
|
+
# the root directory of RSence.
|
28
|
+
@@version = File.read( File.join( SERVER_PATH, 'VERSION' ) ).strip
|
29
|
+
|
30
|
+
# Makes various commands available depending on the platform.
|
31
|
+
# The status/start/stop/restart/save -commands depend on an operating
|
32
|
+
# system that fully implements POSIX standard signals.
|
33
|
+
# These are necessary to send signals to the background process.
|
34
|
+
if not RSence.pid_support?
|
35
|
+
@@cmds = [ :run, :initenv, :version, :help ]
|
36
|
+
else
|
37
|
+
@@cmds = [ :run, :status, :start, :stop, :restart, :save,
|
38
|
+
:initenv, :version, :help ]
|
39
|
+
end
|
40
|
+
|
41
|
+
help_avail_cmds = @@cmds.map{|cmd|cmd.to_s}.join("\n ")
|
42
|
+
|
43
|
+
# Load the strings from the strings file.
|
44
|
+
strs_path = File.join( SERVER_PATH, 'conf',
|
45
|
+
'rsence_command_strings.yaml' )
|
46
|
+
strs_data = File.read( strs_path )
|
47
|
+
require 'erb'
|
48
|
+
|
49
|
+
strs_data = ERB.new( strs_data ).result( binding )
|
50
|
+
|
51
|
+
require 'yaml'
|
52
|
+
@@strs = YAML.load( strs_data )
|
53
|
+
|
54
|
+
@@strs[:help][:run] += @@strs[:help][:path]+@@strs[:help][:options]
|
55
|
+
@@strs[:help][:start] += @@strs[:help][:path]+@@strs[:help][:options]
|
56
|
+
@@strs[:help][:stop] += @@strs[:help][:path]+@@strs[:help][:options]
|
57
|
+
@@strs[:help][:restart] += @@strs[:help][:path]+@@strs[:help][:options]
|
58
|
+
@@strs[:help][:status] += @@strs[:help][:path]
|
59
|
+
@@strs[:help][:save] += @@strs[:help][:path]
|
60
|
+
|
61
|
+
|
62
|
+
# Returns true if one of the 'start' -type commands were supplied
|
63
|
+
# and the environment seems valid.
|
64
|
+
def startable?; @startable; end
|
65
|
+
|
66
|
+
# Parses an argument of the 'help' command
|
67
|
+
def parse_help_argv
|
68
|
+
if @argv.length >= 2
|
69
|
+
help_cmd = @argv[1].to_sym
|
70
|
+
else
|
71
|
+
help_cmd = :help_main
|
72
|
+
end
|
73
|
+
help( help_cmd )
|
74
|
+
exit
|
75
|
+
end
|
76
|
+
|
77
|
+
# Creates the default and initial @args hash.
|
78
|
+
def init_args
|
79
|
+
@args = {
|
80
|
+
:env_path => Dir.pwd,
|
81
|
+
:conf_files => [ ], # --conf
|
82
|
+
:debug => false, # -d --debug
|
83
|
+
:verbose => false, # -v --verbose
|
84
|
+
:log_fg => false, # -f --log-fg
|
85
|
+
:trace_js => false, # --trace-js
|
86
|
+
:trace_delegate => false, # --trace-delegate
|
87
|
+
:port => nil, # --port
|
88
|
+
:addr => nil, # --addr --bind
|
89
|
+
:server => nil, # --server
|
90
|
+
:reset_ses => false, # -r --reset-sessions
|
91
|
+
:autoupdate => false, # -a --auto-update
|
92
|
+
:latency => 0, # --latency
|
93
|
+
:say => false, # -S --say
|
94
|
+
|
95
|
+
# client_pkg (not supported yet)
|
96
|
+
:client_pkg_no_gzip => false, # --build-no-gzip
|
97
|
+
:client_pkg_no_obfuscation => false, # --build-no-obfuscation
|
98
|
+
:client_pkg_no_whitespace_removal => false, # --build-keep-whitespace
|
99
|
+
:client_pkg_quiet => true, # --build-verbose
|
100
|
+
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
# Main argument parser for all 'start' -type commands.
|
105
|
+
def parse_startup_argv
|
106
|
+
init_args
|
107
|
+
expect_option = false
|
108
|
+
option_name = false
|
109
|
+
if @argv.length >= 2
|
110
|
+
@argv[1..-1].each_with_index do |arg,i|
|
111
|
+
if expect_option
|
112
|
+
if [:port,:latency].include?(option_name) and arg.to_i.to_s != arg
|
113
|
+
puts ERB.new( @@strs[:messages][:invalid_option_expected_number] ).result( binding )
|
114
|
+
exit
|
115
|
+
elsif option_name == :conf_files
|
116
|
+
if not File.exists?( arg ) or not File.file?( arg )
|
117
|
+
puts ERB.new( @@strs[:messages][:no_such_configuration_file] ).result( binding )
|
118
|
+
exit
|
119
|
+
else
|
120
|
+
@args[:conf_files].push( arg )
|
121
|
+
end
|
122
|
+
else
|
123
|
+
@args[option_name] = arg
|
124
|
+
end
|
125
|
+
expect_option = false
|
126
|
+
else
|
127
|
+
if arg.start_with?('--')
|
128
|
+
if arg == '--profile'
|
129
|
+
true
|
130
|
+
elsif arg == '--debug'
|
131
|
+
set_debug
|
132
|
+
elsif arg == '--verbose'
|
133
|
+
set_verbose
|
134
|
+
elsif arg == '--log-fg'
|
135
|
+
set_log_fg
|
136
|
+
elsif arg == '--trace-js'
|
137
|
+
@args[:trace_js] = true
|
138
|
+
elsif arg == '--trace-delegate'
|
139
|
+
@args[:trace_delegate] = true
|
140
|
+
elsif arg == '--port'
|
141
|
+
expect_option = true
|
142
|
+
option_name = :port
|
143
|
+
elsif arg == '--addr'
|
144
|
+
expect_option = true
|
145
|
+
option_name = :addr
|
146
|
+
elsif arg == '--server'
|
147
|
+
expect_option = true
|
148
|
+
option_name = :server
|
149
|
+
elsif arg == '--conf' or arg == '--config'
|
150
|
+
expect_option = true
|
151
|
+
option_name = :conf_files
|
152
|
+
elsif arg == '--reset-sessions'
|
153
|
+
set_reset_ses
|
154
|
+
elsif arg == '--auto-update'
|
155
|
+
set_autoupdate
|
156
|
+
elsif arg == '--latency'
|
157
|
+
expect_option = true
|
158
|
+
option_name = :latency
|
159
|
+
elsif arg == '--say'
|
160
|
+
set_say
|
161
|
+
else
|
162
|
+
invalid_option(arg)
|
163
|
+
end
|
164
|
+
elsif arg.start_with?('-')
|
165
|
+
arg.split('')[1..-1].each do |chr|
|
166
|
+
if chr == 'd'
|
167
|
+
set_debug
|
168
|
+
elsif chr == 'v'
|
169
|
+
set_verbose
|
170
|
+
elsif chr == 'f'
|
171
|
+
set_log_fg
|
172
|
+
elsif chr == 'r'
|
173
|
+
set_reset_ses
|
174
|
+
elsif chr == 'a'
|
175
|
+
set_autoupdate
|
176
|
+
elsif chr == 'S'
|
177
|
+
set_say
|
178
|
+
else
|
179
|
+
invalid_option(arg,chr)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
elsif valid_env?(arg)
|
183
|
+
@args[:env_path] = File.expand_path(arg)
|
184
|
+
@args[:conf_files].push( File.expand_path( File.join( arg, 'conf', 'config.yaml' ) ) )
|
185
|
+
else
|
186
|
+
invalid_env( arg )
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
if expect_option
|
191
|
+
puts ERB.new( @@strs[:messages][:no_value_for_option] ).result( binding )
|
192
|
+
exit
|
193
|
+
end
|
194
|
+
end
|
195
|
+
if valid_env?(@args[:env_path])
|
196
|
+
conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
|
197
|
+
@args[:conf_files].push( conf_file ) unless @args[:conf_files].include?( conf_file )
|
198
|
+
else
|
199
|
+
invalid_env
|
200
|
+
end
|
201
|
+
@startable = true
|
202
|
+
end
|
203
|
+
|
204
|
+
# Sets various debug-related options on.
|
205
|
+
def set_debug
|
206
|
+
@args[:debug] = true
|
207
|
+
@args[:verbose] = true
|
208
|
+
@args[:autoupdate] = true
|
209
|
+
@args[:client_pkg_no_obfuscation] = true
|
210
|
+
@args[:client_pkg_no_whitespace_removal] = true
|
211
|
+
@args[:client_pkg_quiet] = false
|
212
|
+
end
|
213
|
+
|
214
|
+
# Set the verbose argument on
|
215
|
+
def set_verbose
|
216
|
+
@args[:verbose] = true
|
217
|
+
end
|
218
|
+
|
219
|
+
# Set the foreground logging argument on
|
220
|
+
def set_log_fg
|
221
|
+
@args[:log_fg] = true
|
222
|
+
end
|
223
|
+
|
224
|
+
# Sets the session reset argument on
|
225
|
+
def set_reset_ses
|
226
|
+
@args[:reset_ses] = true
|
227
|
+
end
|
228
|
+
|
229
|
+
# Sets the auto-update argument on
|
230
|
+
def set_autoupdate
|
231
|
+
@args[:autoupdate] = true
|
232
|
+
end
|
233
|
+
|
234
|
+
# Sets the speech synthesis argument on
|
235
|
+
def set_say
|
236
|
+
@args[:say] = true
|
237
|
+
end
|
238
|
+
|
239
|
+
# Tests for a valid environment
|
240
|
+
def valid_env?( arg, quiet=false )
|
241
|
+
|
242
|
+
# Checks, if the top-level path exists and is a directory
|
243
|
+
path = File.expand_path( arg )
|
244
|
+
if not File.exists?( path )
|
245
|
+
puts ERB.new( @@strs[:messages][:no_such_directory] ).result( binding ) unless quiet
|
246
|
+
return false
|
247
|
+
elsif not File.directory?( path )
|
248
|
+
puts ERB.new( @@strs[:messages][:not_a_directory] ).result( binding ) unless quiet
|
249
|
+
return false
|
250
|
+
end
|
251
|
+
|
252
|
+
# Checks, if the conf path exists and is a directory
|
253
|
+
conf_path = File.join( path, 'conf' )
|
254
|
+
if not File.exists?( conf_path )
|
255
|
+
puts ERB.new( @@strs[:messages][:missing_conf_directory] ).result( binding ) unless quiet
|
256
|
+
return false
|
257
|
+
elsif not File.directory?( conf_path )
|
258
|
+
puts ERB.new( @@strs[:messages][:invalid_conf_directory] ).result( binding ) unless quiet
|
259
|
+
return false
|
260
|
+
end
|
261
|
+
|
262
|
+
# Checks, if the conf/config.yaml file exists and is a directory
|
263
|
+
conf_file = File.join( path, 'conf', 'config.yaml' )
|
264
|
+
if not File.exists?(conf_file)
|
265
|
+
puts ERB.new( @@strs[:messages][:missing_conf_file] ).result( binding ) unless quiet
|
266
|
+
return false
|
267
|
+
elsif not File.file?( conf_file )
|
268
|
+
puts ERB.new( @@strs[:messages][:invalid_conf_file_not_file] ).result( binding ) unless quiet
|
269
|
+
return false
|
270
|
+
end
|
271
|
+
|
272
|
+
# Checks, if the plugins path exists and is a directory
|
273
|
+
plugin_path = File.join( path, 'plugins' )
|
274
|
+
if not File.exists?( plugin_path )
|
275
|
+
warn ERB.new( @@strs[:messages][:warn_no_plugin_directory_in_project] ).result( binding ) if @args[:verbose]
|
276
|
+
elsif not File.directory?( plugin_path )
|
277
|
+
puts ERB.new( @@strs[:messages][:plugin_directory_not_a_directory] ).result( binding ) unless quiet
|
278
|
+
return false
|
279
|
+
end
|
280
|
+
|
281
|
+
# Checks (and automatically creates if missing) the run, db and log directories
|
282
|
+
['run','log','db'].each do |dir_name|
|
283
|
+
dir_path = File.join( path, dir_name )
|
284
|
+
unless File.exists?( dir_path )
|
285
|
+
warn ERB.new( @@strs[:messages][:warn_no_directory_creating] ).result( binding ) if @args[:verbose]
|
286
|
+
Dir.mkdir( dir_path )
|
287
|
+
end
|
288
|
+
end
|
289
|
+
return true
|
290
|
+
end
|
291
|
+
|
292
|
+
# Error message when an invalid environment is encountered, exits.
|
293
|
+
def invalid_env( env_path=false )
|
294
|
+
env_path = @args[:env_path] unless env_path
|
295
|
+
puts ERB.new( @@strs[:messages][:invalid_environment] ).result( binding )
|
296
|
+
exit
|
297
|
+
end
|
298
|
+
|
299
|
+
# Error message when an invalid option is encountered, exits.
|
300
|
+
def invalid_option(arg,chr=false)
|
301
|
+
if chr
|
302
|
+
puts ERB.new( @@strs[:messages][:invalid_option_chr] ).result( binding )
|
303
|
+
else
|
304
|
+
puts ERB.new( @@strs[:messages][:invalid_option] ).result( binding )
|
305
|
+
end
|
306
|
+
exit
|
307
|
+
end
|
308
|
+
|
309
|
+
# Tests, if the port on addr responds or refuses the connection.
|
310
|
+
# Automatically replaces '0.0.0.0' with '127.0.0.1'
|
311
|
+
def test_port( port, addr='127.0.0.1' )
|
312
|
+
require 'socket'
|
313
|
+
begin
|
314
|
+
addr = '127.0.0.1' if addr == '0.0.0.0'
|
315
|
+
if RUBY_VERSION.to_f >= 1.9
|
316
|
+
sock = TCPSocket.open( addr, port )
|
317
|
+
else
|
318
|
+
sock = TCPsocket.open( addr, port )
|
319
|
+
end
|
320
|
+
sock.close
|
321
|
+
return true
|
322
|
+
rescue Errno::ECONNREFUSED
|
323
|
+
return false
|
324
|
+
rescue => e
|
325
|
+
warn e.inspect
|
326
|
+
return false
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
# Main argument parser for the status command, sends the INFO POSIX signal to the process, if running.
|
331
|
+
# Checks if the process responds on the port and address it's configured for.
|
332
|
+
def parse_status_argv
|
333
|
+
init_args
|
334
|
+
expect_option = false
|
335
|
+
option_name = false
|
336
|
+
if @argv.length >= 2
|
337
|
+
@argv[1..-1].each_with_index do |arg,i|
|
338
|
+
if expect_option
|
339
|
+
if [:port].include?(option_name) and arg.to_i.to_s != arg
|
340
|
+
puts ERB.new( @@strs[:messages][:invalid_option_expected_number] ).result( binding )
|
341
|
+
exit
|
342
|
+
elsif option_name == :conf_files
|
343
|
+
if not File.exists?( arg ) or not File.file?( arg )
|
344
|
+
puts ERB.new( @@strs[:messages][:no_such_configuration_file] ).result( binding )
|
345
|
+
exit
|
346
|
+
else
|
347
|
+
@args[:conf_files].push( arg )
|
348
|
+
end
|
349
|
+
else
|
350
|
+
@args[option_name] = arg
|
351
|
+
end
|
352
|
+
expect_option = false
|
353
|
+
else
|
354
|
+
if arg.start_with?('--')
|
355
|
+
if arg == '--debug'
|
356
|
+
set_debug
|
357
|
+
elsif arg == '--verbose'
|
358
|
+
set_verbose
|
359
|
+
elsif arg == '--port'
|
360
|
+
expect_option = true
|
361
|
+
option_name = :port
|
362
|
+
elsif arg == '--addr'
|
363
|
+
expect_option = true
|
364
|
+
option_name = :addr
|
365
|
+
elsif arg == '--conf' or arg == '--config'
|
366
|
+
expect_option = true
|
367
|
+
option_name = :conf_files
|
368
|
+
else
|
369
|
+
invalid_option(arg)
|
370
|
+
end
|
371
|
+
elsif arg.start_with?('-')
|
372
|
+
arg.split('')[1..-1].each do |chr|
|
373
|
+
if chr == 'd'
|
374
|
+
set_debug
|
375
|
+
elsif chr == 'v'
|
376
|
+
set_verbose
|
377
|
+
else
|
378
|
+
invalid_option(arg,chr)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
elsif valid_env?(arg)
|
382
|
+
@args[:env_path] = File.expand_path(arg)
|
383
|
+
@args[:conf_files].push( File.expand_path( File.join( arg, 'conf', 'config.yaml' ) ) )
|
384
|
+
else
|
385
|
+
invalid_env( arg )
|
386
|
+
end
|
387
|
+
end
|
388
|
+
end
|
389
|
+
if expect_option
|
390
|
+
puts ERB.new( @@strs[:messages][:no_value_for_option] ).result( binding )
|
391
|
+
exit
|
392
|
+
end
|
393
|
+
end
|
394
|
+
if valid_env?(@args[:env_path])
|
395
|
+
conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
|
396
|
+
@args[:conf_files].push( conf_file ) unless @args[:conf_files].include?( conf_file )
|
397
|
+
else
|
398
|
+
invalid_env
|
399
|
+
end
|
400
|
+
require 'conf/default'
|
401
|
+
config = Configuration.new(@args).config
|
402
|
+
port = config[:http_server][:port]
|
403
|
+
addr = config[:http_server][:bind_address]
|
404
|
+
port_status = test_port( port, addr )
|
405
|
+
if RSence.pid_support?
|
406
|
+
pid_fn = config[:daemon][:pid_fn]
|
407
|
+
if File.exists?( pid_fn )
|
408
|
+
pid = File.read( pid_fn ).to_i
|
409
|
+
pid_status = RSence::SIGComm.wait_signal_response(
|
410
|
+
pid, pid_fn, 'INFO', 3
|
411
|
+
)
|
412
|
+
else
|
413
|
+
warn @@strs[:messages][:no_pid_file] if @args[:verbose]
|
414
|
+
pid_status = nil
|
415
|
+
end
|
416
|
+
else
|
417
|
+
warn @@strs[:messages][:no_pid_support] if @args[:verbose]
|
418
|
+
pid_status = nil
|
419
|
+
end
|
420
|
+
if RSence.pid_support?
|
421
|
+
if pid_status == nil
|
422
|
+
puts @@strs[:messages][:no_pid]
|
423
|
+
elsif pid_status == false
|
424
|
+
if port_status
|
425
|
+
puts ERB.new( @@strs[:messages][:no_process_running_but_something_responds] ).result( binding )
|
426
|
+
else
|
427
|
+
puts ERB.new( @@strs[:messages][:no_process_running_and_nothing_responds] ).result( binding )
|
428
|
+
end
|
429
|
+
else
|
430
|
+
if port_status
|
431
|
+
puts ERB.new( @@strs[:messages][:process_running_and_responds] ).result( binding )
|
432
|
+
else
|
433
|
+
puts ERB.new( @@strs[:messages][:process_running_but_nothing_responds] ).result( binding )
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
# Main argument parser for the save command. Sends the USR1 POSIX signal to the process, if running.
|
440
|
+
def parse_save_argv
|
441
|
+
init_args
|
442
|
+
expect_option = false
|
443
|
+
option_name = false
|
444
|
+
if @argv.length >= 2
|
445
|
+
@argv[1..-1].each_with_index do |arg,i|
|
446
|
+
if expect_option
|
447
|
+
if option_name == :conf_files
|
448
|
+
if not File.exists?( arg ) or not File.file?( arg )
|
449
|
+
puts ERB.new( @@strs[:messages][:no_such_configuration_file] ).result( binding )
|
450
|
+
exit
|
451
|
+
else
|
452
|
+
@args[:conf_files].push( arg )
|
453
|
+
end
|
454
|
+
else
|
455
|
+
@args[option_name] = arg
|
456
|
+
end
|
457
|
+
expect_option = false
|
458
|
+
else
|
459
|
+
if arg.start_with?('--')
|
460
|
+
if arg == '--debug'
|
461
|
+
set_debug
|
462
|
+
elsif arg == '--verbose'
|
463
|
+
set_verbose
|
464
|
+
elsif arg == '--conf' or arg == '--config'
|
465
|
+
expect_option = true
|
466
|
+
option_name = :conf_files
|
467
|
+
else
|
468
|
+
invalid_option(arg)
|
469
|
+
end
|
470
|
+
elsif arg.start_with?('-')
|
471
|
+
arg.split('')[1..-1].each do |chr|
|
472
|
+
if chr == 'd'
|
473
|
+
set_debug
|
474
|
+
elsif chr == 'v'
|
475
|
+
set_verbose
|
476
|
+
else
|
477
|
+
invalid_option(arg,chr)
|
478
|
+
end
|
479
|
+
end
|
480
|
+
elsif valid_env?(arg)
|
481
|
+
@args[:env_path] = File.expand_path(arg)
|
482
|
+
@args[:conf_files].push( File.expand_path( File.join( arg, 'conf', 'config.yaml' ) ) )
|
483
|
+
else
|
484
|
+
invalid_env( arg )
|
485
|
+
end
|
486
|
+
end
|
487
|
+
end
|
488
|
+
if expect_option
|
489
|
+
puts ERB.new( @@strs[:messages][:no_value_for_option] ).result( binding )
|
490
|
+
exit
|
491
|
+
end
|
492
|
+
end
|
493
|
+
if valid_env?(@args[:env_path])
|
494
|
+
conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
|
495
|
+
@args[:conf_files].push( conf_file ) unless @args[:conf_files].include?( conf_file )
|
496
|
+
else
|
497
|
+
invalid_env
|
498
|
+
end
|
499
|
+
require 'conf/default'
|
500
|
+
config = Configuration.new(@args).config
|
501
|
+
if RSence.pid_support?
|
502
|
+
pid_fn = config[:daemon][:pid_fn]
|
503
|
+
if File.exists?( pid_fn )
|
504
|
+
pid = File.read( pid_fn ).to_i
|
505
|
+
saving_message = @@strs[:messages][:saving_message]
|
506
|
+
pid_status = RSence::SIGComm.wait_signal_response(
|
507
|
+
pid, pid_fn, 'USR2', 30, saving_message, '.', 0.1, true
|
508
|
+
)
|
509
|
+
else
|
510
|
+
warn @@strs[:messages][:no_pid_file] if @args[:verbose]
|
511
|
+
pid_status = nil
|
512
|
+
end
|
513
|
+
else
|
514
|
+
warn @@strs[:messages][:no_pid_support] if @args[:verbose]
|
515
|
+
pid_status = nil
|
516
|
+
end
|
517
|
+
if RSence.pid_support?
|
518
|
+
if pid_status == nil
|
519
|
+
puts @@strs[:messages][:no_pid_unable_to_save]
|
520
|
+
elsif pid_status == false
|
521
|
+
puts @@strs[:messages][:no_process_running]
|
522
|
+
else
|
523
|
+
puts @@strs[:messages][:session_data_saved]
|
524
|
+
end
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
528
|
+
# asks y/n and returns booleans,
|
529
|
+
# the default tells if which one is for just enter
|
530
|
+
def yesno(default=false)
|
531
|
+
if default
|
532
|
+
question = "Y/n? "
|
533
|
+
else
|
534
|
+
question = "y/N? "
|
535
|
+
end
|
536
|
+
print question
|
537
|
+
answer = $stdin.gets.strip.downcase[0]
|
538
|
+
answer = answer.chr if answer
|
539
|
+
if answer == 'n'
|
540
|
+
return false
|
541
|
+
elsif answer == 'y'
|
542
|
+
return true
|
543
|
+
elsif answer == nil
|
544
|
+
return default
|
545
|
+
else
|
546
|
+
return nil
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
# The initenv command and its parser. Asks questions about the environment before doing anything else.
|
551
|
+
def parse_initenv_argv
|
552
|
+
init_args
|
553
|
+
expect_option = false
|
554
|
+
option_name = false
|
555
|
+
valid_env = false
|
556
|
+
interactive = true
|
557
|
+
create_blank = false
|
558
|
+
if @argv.length >= 2
|
559
|
+
@argv[1..-1].each_with_index do |arg,i|
|
560
|
+
if expect_option
|
561
|
+
if [:port].include?(option_name) and arg.to_i.to_s != arg
|
562
|
+
puts ERB.new( @@strs[:messages][:invalid_option_expected_number] ).result( binding )
|
563
|
+
exit
|
564
|
+
else
|
565
|
+
@args[option_name] = arg
|
566
|
+
end
|
567
|
+
expect_option = false
|
568
|
+
else
|
569
|
+
if arg.start_with?('--')
|
570
|
+
if arg == '--port'
|
571
|
+
expect_option = true
|
572
|
+
option_name = :port
|
573
|
+
elsif arg == '--addr'
|
574
|
+
expect_option = true
|
575
|
+
option_name = :addr
|
576
|
+
elsif arg == '--server'
|
577
|
+
expect_option = true
|
578
|
+
option_name = :server
|
579
|
+
elsif arg == '--title'
|
580
|
+
expect_option = true
|
581
|
+
option_name = :title
|
582
|
+
elsif arg == '--database'
|
583
|
+
expect_option = true
|
584
|
+
option_name = :db
|
585
|
+
elsif arg == '--uri-prefix'
|
586
|
+
expect_option = true
|
587
|
+
option_name = :base_url
|
588
|
+
elsif arg == '--blank'
|
589
|
+
create_blank = true
|
590
|
+
elsif arg == '--non-interactive'
|
591
|
+
interactive = false
|
592
|
+
else
|
593
|
+
invalid_option(arg)
|
594
|
+
end
|
595
|
+
elsif arg.start_with?('-')
|
596
|
+
arg.split('')[1..-1].each do |chr|
|
597
|
+
if chr == 'q'
|
598
|
+
interactive = false
|
599
|
+
end
|
600
|
+
end
|
601
|
+
else
|
602
|
+
@args[:env_path] = File.expand_path(arg)
|
603
|
+
end
|
604
|
+
end
|
605
|
+
end
|
606
|
+
if expect_option
|
607
|
+
puts ERB.new( @@strs[:messages][:no_value_for_option] ).result( binding )
|
608
|
+
exit
|
609
|
+
end
|
610
|
+
end
|
611
|
+
if valid_env?(@args[:env_path],true)
|
612
|
+
puts @@strs[:initenv][:env_already_initialized]
|
613
|
+
exit
|
614
|
+
end
|
615
|
+
conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
|
616
|
+
if File.exists?(@args[:env_path])
|
617
|
+
if Dir.entries(@args[:env_path]).length > 2 # [ '.', '..' ]
|
618
|
+
puts ERB.new( @@strs[:initenv][:env_not_empty] ).result( binding )
|
619
|
+
exit
|
620
|
+
end
|
621
|
+
end
|
622
|
+
|
623
|
+
require 'conf/default'
|
624
|
+
default_config = Configuration.new(@args,true).config
|
625
|
+
|
626
|
+
config = {
|
627
|
+
:base_url => (@args[:base_url] or default_config[:base_url]),
|
628
|
+
:http_server => {
|
629
|
+
:port => (@args[:port] or default_config[:http_server][:port]),
|
630
|
+
:bind_address => (@args[:addr] or default_config[:http_server][:bind_address]),
|
631
|
+
:rack_require => (@args[:server] or default_config[:http_server][:rack_require])
|
632
|
+
},
|
633
|
+
:index_html => {
|
634
|
+
:title => (@args[:title] or default_config[:index_html][:title])
|
635
|
+
},
|
636
|
+
:database => {
|
637
|
+
:ses_db => (@args[:db] or default_config[:database][:ses_db])
|
638
|
+
}
|
639
|
+
}
|
640
|
+
Signal.trap 'INT' do
|
641
|
+
puts
|
642
|
+
puts "Configuration aborted."
|
643
|
+
exit
|
644
|
+
end
|
645
|
+
if interactive
|
646
|
+
answers_ok = false
|
647
|
+
until answers_ok
|
648
|
+
puts ERB.new( @@strs[:initenv][:creating_env] ).result( binding )
|
649
|
+
|
650
|
+
require 'highline/import'
|
651
|
+
|
652
|
+
say @@strs[:initenv][:enter_title]
|
653
|
+
str_project_title = @@strs[:initenv][:project_title]
|
654
|
+
config[:index_html][:title] = ask( str_project_title ) do |q|
|
655
|
+
q.default = config[:index_html][:title]
|
656
|
+
end
|
657
|
+
|
658
|
+
say @@strs[:initenv][:enter_db_url]
|
659
|
+
str_db_url = @@strs[:initenv][:db_url]
|
660
|
+
config[:database][:ses_db] = ask(str_db_url) do |q|
|
661
|
+
q.default = config[:database][:ses_db]
|
662
|
+
end
|
663
|
+
|
664
|
+
say @@strs[:initenv][:enter_http_port]
|
665
|
+
str_http_port = @@strs[:initenv][:http_port]
|
666
|
+
config[:http_server][:port] = ask(str_http_port) do |q|
|
667
|
+
q.default = config[:http_server][:port]
|
668
|
+
end
|
669
|
+
|
670
|
+
say @@strs[:initenv][:enter_tcp_ip]
|
671
|
+
str_tcp_ip = @@strs[:initenv][:tcp_ip]
|
672
|
+
config[:http_server][:bind_address] = ask(str_tcp_ip) do |q|
|
673
|
+
q.default = config[:http_server][:bind_address]
|
674
|
+
end
|
675
|
+
|
676
|
+
say @@strs[:initenv][:enter_root_dir]
|
677
|
+
str_root_dir = @@strs[:initenv][:root_dir]
|
678
|
+
config[:base_url] = ask(str_root_dir) do |q|
|
679
|
+
q.default = config[:base_url]
|
680
|
+
end
|
681
|
+
|
682
|
+
test_url = "http://#{config[:http_server][:bind_address]}:#{config[:http_server][:port]}#{config[:base_url]}"
|
683
|
+
say ERB.new( @@strs[:initenv][:config_summary] ).result( binding )
|
684
|
+
print @@strs[:initenv][:confirm_config]
|
685
|
+
answers_ok = yesno(true)
|
686
|
+
end
|
687
|
+
else
|
688
|
+
test_url = "http://#{config[:http_server][:bind_address]}:#{config[:http_server][:port]}#{config[:base_url]}"
|
689
|
+
end
|
690
|
+
|
691
|
+
puts @@strs[:initenv][:creating_dirs]
|
692
|
+
env_dir = @args[:env_path]
|
693
|
+
require 'fileutils'
|
694
|
+
FileUtils.mkdir_p( env_dir ) unless File.exists?( env_dir )
|
695
|
+
conf_dir = File.expand_path( 'conf', env_dir )
|
696
|
+
Dir.mkdir( conf_dir )
|
697
|
+
db_dir = File.expand_path( 'db', env_dir )
|
698
|
+
Dir.mkdir( db_dir )
|
699
|
+
log_dir = File.expand_path( 'log', env_dir )
|
700
|
+
Dir.mkdir( log_dir )
|
701
|
+
plugins_dir = File.expand_path( 'plugins', env_dir )
|
702
|
+
Dir.mkdir( plugins_dir )
|
703
|
+
run_dir = File.expand_path( 'run', env_dir )
|
704
|
+
Dir.mkdir( run_dir )
|
705
|
+
unless create_blank
|
706
|
+
welcome_plugin_dir = File.join( SERVER_PATH, 'setup', 'welcome' )
|
707
|
+
welcome_plugin_dst = File.join( plugins_dir, 'welcome' )
|
708
|
+
puts ERB.new( @@strs[:initenv][:installing_welcome_plugin] ).result( binding )
|
709
|
+
FileUtils.cp_r( welcome_plugin_dir, welcome_plugin_dst )
|
710
|
+
end
|
711
|
+
puts @@strs[:initenv][:creating_files]
|
712
|
+
conf_file = File.join( conf_dir, 'config.yaml' )
|
713
|
+
File.open( conf_file, 'w' ) {|f| f.write( YAML.dump( config ) ) }
|
714
|
+
readme_file = File.join( env_dir, 'README' )
|
715
|
+
File.open( readme_file, 'w' ) {|f| f.write( ERB.new( @@strs[:initenv][:readme] ).result( binding ) ) }
|
716
|
+
version_file = File.join( env_dir, 'VERSION' )
|
717
|
+
File.open( version_file, 'w' ) {|f| f.write( "RSence Environment Version #{version.to_f}" ) }
|
718
|
+
puts ERB.new( @@strs[:initenv][:congratulations] ).result( binding )
|
719
|
+
exit
|
720
|
+
end
|
721
|
+
|
722
|
+
# Main parser for the help command
|
723
|
+
def help( cmd )
|
724
|
+
cmd.to_sym! if cmd.class != Symbol
|
725
|
+
puts @@strs[:help][:head]
|
726
|
+
if @@strs[:help].has_key?(cmd)
|
727
|
+
puts @@strs[:help][cmd]
|
728
|
+
else
|
729
|
+
puts @@strs[:help][:help_main]
|
730
|
+
end
|
731
|
+
puts @@strs[:help][:tail]
|
732
|
+
end
|
733
|
+
|
734
|
+
# Returns the version of RSence
|
735
|
+
def version
|
736
|
+
@@version
|
737
|
+
end
|
738
|
+
|
739
|
+
# Returns the command the process was started with.
|
740
|
+
def cmd
|
741
|
+
@cmd
|
742
|
+
end
|
743
|
+
|
744
|
+
# Returns the parsed optional arguments
|
745
|
+
def args
|
746
|
+
@args
|
747
|
+
end
|
748
|
+
|
749
|
+
# Top-level argument parser, checks for command and calls sub-parser, if valid command.
|
750
|
+
def parse_argv
|
751
|
+
if @argv.empty?
|
752
|
+
puts @@strs[:help][:help_help]
|
753
|
+
exit
|
754
|
+
else
|
755
|
+
cmd = @argv[0].to_sym
|
756
|
+
cmd = :help if [:h, :'-h', :'--help', :'-help'].include? cmd
|
757
|
+
end
|
758
|
+
if @@cmds.include?(cmd)
|
759
|
+
@cmd = cmd
|
760
|
+
if cmd == :help
|
761
|
+
parse_help_argv
|
762
|
+
elsif cmd == :version
|
763
|
+
puts version
|
764
|
+
exit
|
765
|
+
elsif [:run,:start,:stop,:restart].include? cmd
|
766
|
+
parse_startup_argv
|
767
|
+
elsif cmd == :status
|
768
|
+
parse_status_argv
|
769
|
+
elsif cmd == :save
|
770
|
+
parse_save_argv
|
771
|
+
elsif cmd == :initenv
|
772
|
+
parse_initenv_argv
|
773
|
+
end
|
774
|
+
else
|
775
|
+
puts @@strs[:help][:unknown] + cmd.to_s.inspect
|
776
|
+
puts @@strs[:help][:help_help]
|
777
|
+
exit
|
778
|
+
end
|
779
|
+
end
|
780
|
+
|
781
|
+
# Entry point for ARGV parsing
|
782
|
+
def parse( argv )
|
783
|
+
@argv = argv
|
784
|
+
@startable = false
|
785
|
+
parse_argv
|
786
|
+
end
|
787
|
+
|
788
|
+
# The constructor sets the @startable flag as false. Use the #parse method with ARGV as the argument to start parsing the ARGV.
|
789
|
+
def initialize
|
790
|
+
@startable = false
|
791
|
+
end
|
792
|
+
|
793
|
+
end
|
794
|
+
|
795
|
+
# @private This accessor enables RSence.argv method, which returns the ARGVParser instance
|
796
|
+
def self.argv; @@argv_parser; end
|
797
|
+
|
798
|
+
# @private This accessor enables RSence.cmd method, which returns the command the process was started with.
|
799
|
+
def self.cmd; @@argv_parser.cmd; end
|
800
|
+
|
801
|
+
# Command line options parsed
|
802
|
+
# @return [Hash] Parsed command-line options:
|
803
|
+
# *Key* (Symbol):: *Value*
|
804
|
+
# +:env_path+:: (String) The directory of the environment.
|
805
|
+
# +:conf_files+:: (Array of Strings) Additional configuration files given with the +--conf+ command-line option. Default is +[]+.
|
806
|
+
# +:debug+:: (true or false) True, if the +-d+ or +--debug+ command-line option was given. Default is false.
|
807
|
+
# +:verbose+:: (true or false) True, if the +-v+ or +--verbose+ command-line option was given. Default is false.
|
808
|
+
# +:log_fg+:: (true or false) True, if the +-f+ or +--log-fg+ command-line option was given. Default is false.
|
809
|
+
# +:trace_js+:: (true or false) True, if the +--trace-js+ command-line option was given. Default is false.
|
810
|
+
# +:trace_delegate+:: (true or false) True, if the +--trace-delegate+ command-line option was given. Default is false.
|
811
|
+
# +:port+:: (String or nil) The TCP port number given with the +--port+ command-line option. Default is nil.
|
812
|
+
# +:addr+:: (String or nil) The TCP bind address given with the +--addr+ command-line option. Default is nil.
|
813
|
+
# +:server+:: (String or nil) The Rack http server handler given with the +--server+ command-line option. Default is nil.
|
814
|
+
# +:reset_ses+:: (true or false) True, if the +-r+ or +--reset-sessions+ command-line option was given. Default is false.
|
815
|
+
# +:autoupdate+:: (true or false) True, if the +-a+ or +--auto-update+ command-line option was given. Default is false.
|
816
|
+
# +:latency+:: (Number) Amount of milliseconds to sleep in each request given with the +--latency+ command-line option. Default is 0.
|
817
|
+
# +:say+:: (true or false) True, if the +-S+ or +--say+ command-line option was given. Default is false.
|
818
|
+
def self.args; @@argv_parser.args; end
|
819
|
+
|
820
|
+
# @private This accessor enables RSence.startable? method, which returns true if a start-type command was given.
|
821
|
+
def self.startable?; @@argv_parser.startable?; end
|
822
|
+
|
823
|
+
# @return [String] The version of RSence
|
824
|
+
def self.version; @@argv_parser.version; end
|
825
|
+
|
826
|
+
# @private This accessor enables RSence.startup method, which starts RSence.
|
827
|
+
def self.startup
|
828
|
+
puts "Loading configuration..." if self.args[:verbose]
|
829
|
+
# Use the default configuration:
|
830
|
+
require 'conf/default'
|
831
|
+
@@config = Configuration.new(self.args).config
|
832
|
+
|
833
|
+
# RSence runtime configuration data
|
834
|
+
# @return [Hash] the active configuration structure as defined by the {file:default_conf default configuration} and overridden by local configuration files.
|
835
|
+
def self.config
|
836
|
+
@@config
|
837
|
+
end
|
838
|
+
## Riassence Daemon controls
|
839
|
+
require 'daemon/daemon'
|
840
|
+
puts "Starting RSence..." if self.args[:verbose]
|
841
|
+
daemon = HTTPDaemon.new
|
842
|
+
daemon.daemonize!
|
843
|
+
end
|
844
|
+
|
845
|
+
# @private The ARGVParser instance and its startup
|
846
|
+
@@argv_parser = ARGVParser.new
|
847
|
+
@@argv_parser.parse( ARGV )
|
848
|
+
|
849
|
+
end
|
850
|
+
|