tools 0.0.1 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,147 @@
1
+ require 'singleton'
2
+ class ToolsConsole
3
+ include Singleton
4
+
5
+
6
+ def self.create_console
7
+
8
+ extend Prompt::DSL
9
+
10
+ group "Console commands"
11
+
12
+ desc "configure"
13
+ param :config_type , "Config type search for roots locations...", %(location show)
14
+ command "config :config_type" do |config_type|
15
+
16
+ Prompt.application.prompt = "#{Tools.configuration.console_prompt} console > ".light_blue
17
+ puts "Choise yuor config action .:".yellow
18
+
19
+ end
20
+
21
+ desc "history"
22
+ command "history" do
23
+ File.open(@history_file, 'r') do |f|
24
+ while line = f.gets
25
+ puts line
26
+ end
27
+ end
28
+ end
29
+
30
+ desc "test"
31
+ command "test" do
32
+ puts 'Im a test.!'.yellow
33
+ end
34
+
35
+ end
36
+
37
+ def self.my_method_missing
38
+ ap "my_method_missing"
39
+ end
40
+
41
+ def self.run_console
42
+ Prompt.application.prompt = "#{Tools.configuration.console_prompt} console > ".light_green
43
+ @history_file = File.join(File.expand_path(File.dirname(__FILE__)).to_s, ".workin-history")
44
+ Prompt::Console.start @history_file
45
+ end
46
+
47
+ end
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+ # class Console
57
+
58
+ # def initialize(options = {})
59
+ # commands
60
+ # end
61
+
62
+ # def commands
63
+
64
+ # extend Prompt::DSL
65
+
66
+ # group "Commands"
67
+
68
+ # desc "config"
69
+ # command "config" do ||
70
+ # Prompt.application.prompt = " tools > ".light_blue
71
+ # end
72
+
73
+ # desc "show"
74
+ # command "show :param" do |param|
75
+ # case param
76
+ # when 'config'
77
+ # puts "ROOT .: #{Tools.root}"
78
+ # puts "USER .: #{Tools.configuration.user}"
79
+ # puts "HOME .: #{Tools.configuration.home}"
80
+ # puts "PWD .: #{Tools.configuration.pwd}"
81
+ # puts "ldap_user .: #{Tools.configuration.ldap_user}"
82
+ # puts "ldap_pass .: #{Tools.configuration.ldap_pass}"
83
+ # Tools.configuration.info.each do |k,v|
84
+ # ap k
85
+ # ap v
86
+ # end
87
+ # else
88
+ # ap Tools.get_variable param
89
+ # end
90
+ # end
91
+
92
+ # desc "rsync"
93
+ # command "rsync :from :to" do |from, to|
94
+
95
+ # ap Tools.configuration.info[:directorys_to][from].nil?
96
+
97
+ # unless Tools.configuration.info[:directorys_to][from].nil?
98
+ # from = Tools.configuration.info[:directorys_to][from]
99
+ # from += ask("?? ")
100
+ # else
101
+ # sourcefiles = File.join("**", from)
102
+ # Dir.glob(sourcefiles).each do |source|
103
+ # ap source
104
+ # end
105
+ # end
106
+
107
+ # ap from
108
+
109
+ # # if File.file?(source)
110
+ # # result = Rsync.run(source, dest)
111
+ # # ap result
112
+ # # end
113
+
114
+ # end
115
+
116
+ # desc "connect"
117
+ # command "connect :host" do |host|
118
+ # if host.split('@').size == 2
119
+ # user = host.split('@')[0]
120
+ # host = host.split('@')[1]
121
+ # else
122
+ # unless Tools.configuration.info[:servers][host].nil?
123
+ # user = Tools.configuration.info[:servers][host].split('@')[0]
124
+ # host = Tools.configuration.info[:servers][host].split('@')[1]
125
+ # else
126
+ # ap "No hosts selected! Exiting..."
127
+ # end
128
+ # end
129
+ # ssh = Tools.ssh_connect_knowhost host, user
130
+ # Tools.set_variable 'ssh', ssh
131
+ # end
132
+
133
+
134
+ # desc "cmd"
135
+ # command "cmd :variable :command " do |variable, command|
136
+ # ssh = Tools.get_variable 'ssh'
137
+ # Tools.set_variable variable, (Tools.ssh_cmd ssh, command).split("\n")
138
+ # end
139
+
140
+
141
+ # Prompt.application.prompt = " tools > ".light_red
142
+ # history_file = ".tools-history"
143
+ # Prompt::Console.start history_file
144
+
145
+ # end
146
+
147
+ # end
@@ -0,0 +1,41 @@
1
+ require 'singleton'
2
+ class ToolsDisplay
3
+ include Singleton
4
+
5
+ # Tools to awesome prints
6
+ #
7
+ # ToolsDisplay.show "teste"
8
+ # ToolsDisplay.show "TEXT SAMELINE sem cor ", :sameline
9
+ # ToolsDisplay.show "TEXT GREEN", :green
10
+ # ToolsDisplay.show "TEXT YELLOW", :yellow
11
+ #
12
+ # @param arguments
13
+ # @return [String] printed
14
+ def self.show *arguments
15
+ post = arguments[0]
16
+ unless (post.class == String)
17
+ return post.class.to_s
18
+ end
19
+
20
+ color = arguments.extract_color
21
+ sameline = arguments.extract_symbol :sameline
22
+ nocolor = arguments.extract_symbol :nocolor
23
+ colorized = arguments.extract_symbol :colorized
24
+
25
+ unless sameline
26
+ post += "\n"
27
+ end
28
+ unless nocolor
29
+ printf "#{post}".colorize(color)
30
+ else
31
+ if colorized
32
+ ap post
33
+ else
34
+ printf "#{post}"
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+
41
+ end
@@ -0,0 +1,51 @@
1
+ require 'singleton'
2
+ class ToolsFiles
3
+ include Singleton
4
+
5
+ def initialize(options = {})
6
+ end
7
+
8
+
9
+ # Create a directory in work area
10
+ #
11
+ # Sample
12
+ # ToolsFiles.create_dir Tools.home + '/2018/xykotools/tools/home', 'tools_home'
13
+ # home = (ToolsUtil.get_variable 'tools_home') => ~/2018/xykotools/tools/home
14
+ #
15
+ # @param directory
16
+ # @param directory_name
17
+ # @return
18
+ def self.create_dir directory, directory_name
19
+ unless directory.end_with? '/'
20
+ directory += '/'
21
+ end
22
+ complete_file = (directory + '/').gsub('//','/')
23
+ unless File.exists? complete_file
24
+ Dir.mkdir(complete_file)
25
+ end
26
+ ToolsUtil.set_variable directory_name, complete_file
27
+ end
28
+
29
+ # Create a file in work area
30
+ #
31
+ # Sample
32
+ #
33
+ # ToolsFiles.create_file home, 'xyko_file.txt', 'xyko_file'
34
+ # xyko = (ToolsUtil.get_variable 'xyko_file') => ~/2018/xykotools/tools/home/xyko_file.txt
35
+ #
36
+ # @param directory
37
+ # @param file_name
38
+ # @param file_name_set
39
+ # @return
40
+ def self.create_file directory, file_name, file_name_set
41
+ complete_file = (directory + '/' + file_name).gsub('//','/')
42
+ unless File.exists? complete_file
43
+ file = File.open( complete_file , 'w')
44
+ end
45
+ ToolsUtil.set_variable file_name_set, complete_file
46
+ end
47
+
48
+
49
+
50
+
51
+ end
@@ -0,0 +1,66 @@
1
+ require 'singleton'
2
+ class ToolsLog
3
+ include Singleton
4
+
5
+ def initialize(options = {})
6
+
7
+ end
8
+
9
+
10
+ # Create a Log file in work area
11
+ #
12
+ # Sample
13
+ #
14
+ # ToolsLog.create_log_file 'sample', '/myhome/tools/sample.log'
15
+ # log = ToolsUtil.get_variable "sample_logger" => Logger Object
16
+ #
17
+ # ToolsLog.create_log_file 'xyko', '/home/francisco/2018/xykotools/tools/xyko.log'
18
+ # ToolsLog.xyko_info 'teste do methodo1', :light_yellow
19
+ # ToolsLog.xyko_warn 'teste do methodo2'
20
+ # ToolsLog.xyko_error 'teste do methodo3'
21
+ # ToolsLog.xyko_debug 'teste do methodo4'
22
+ #
23
+ # @param logname
24
+ # @param logfile
25
+ # @return
26
+ def self.create_log_file log_name, log_file
27
+ if File.exists? log_file
28
+ unless File.ctime(log_file).to_date == Time.now.to_date
29
+ File.delete(log_file)
30
+ end
31
+ end
32
+ ToolsUtil.set_variable "#{log_name}_log_file", log_file
33
+ ToolsUtil.set_variable "#{log_name}_logger", Logger.new(log_file, 'daily')
34
+ (ToolsUtil.get_variable "#{log_name}_logger").formatter = proc do |severity, datetime, progname, msg|
35
+ "#{severity.chars.first} #{datetime.strftime "%H:%M:%S"}: #{msg}\n"
36
+ end
37
+ #ToolsUtil.purge_files Tools.home+'/.tools/backup', '*', 14*24*60*60
38
+ end
39
+
40
+ def self.method_missing(method, *args, &block)
41
+ #expected call format => STRING_LOGGER_TYPE + '_' + LOGGER_TYPE
42
+ # Ex.: tools_info
43
+ logger_name = method.to_s.split('_').first
44
+ logger_method = method.to_s.split('_').last
45
+ logger = ToolsUtil.get_variable "#{logger_name}_logger"
46
+ color = args.extract_color
47
+ if color.eql? :default
48
+ case logger_method
49
+ when 'info'
50
+ color = :cyan
51
+ when 'warn'
52
+ color = :yellow
53
+ when 'debug'
54
+ color = :green
55
+ when 'error'
56
+ color = :light_red
57
+ when 'exit'
58
+ log_file = ToolsUtil.get_variable "#{logger_name}_log_file"
59
+ ToolsDisplay.show "\tError in ToolsUtil. See details in '#{log_file}'", :light_yellow
60
+ exit
61
+ end
62
+ end
63
+ logger.method(logger_method).call args.first.colorize(color)
64
+ end
65
+
66
+ end
@@ -0,0 +1,141 @@
1
+ require 'singleton'
2
+ class ToolsNet
3
+ include Singleton
4
+
5
+
6
+ # Resolv a ip to a dns.
7
+ #
8
+ # @param ip variable ip to resolv
9
+ # @return [String] Dns name resolved
10
+ def self.resolv_ip_name ip
11
+ s = ''
12
+ begin
13
+ ret = Resolv.new.getname(ip)
14
+ return ret.instance_variable_get('@labels').join('.')
15
+ rescue Exception => e
16
+ s = 'edi error: ' + e.message
17
+ end
18
+ return s.strip
19
+ end
20
+
21
+
22
+ # Resolv a dns to a ip.
23
+ #
24
+ # @param domain variable ip to resolv
25
+ # @return [String] Dns address resolved
26
+ def self.resolv_dns domain
27
+ begin
28
+ dns = Dnsruby::DNS.new()
29
+ ret = dns.getaddress(domain).to_s
30
+ rescue Exception => e
31
+ case e.message
32
+ when "Dnsruby::NXDomain"
33
+ ret = nil
34
+ else
35
+ ret = e.message
36
+ end
37
+ end
38
+ return ret
39
+ end
40
+
41
+
42
+ # Do the request, validate and decode response and do the retries if needed
43
+ #
44
+ # - restclient_obj: initialized RestClient object
45
+ # - path: URL path to request
46
+ # - method: symbol for HTTP Method to request
47
+ # - method_opts: options as passed to a RestClient call
48
+ # - validate_opts: options for response validation as used with
49
+ # validate_decode_response()
50
+ # - retry_opts: when_res: [nil, [], {}, 'str'], when_code: [404, 500],
51
+ # conditionals to retry even if no exceptions were catched
52
+ # @param restclient_obj Rest Object
53
+ # @param path path
54
+ # @param method method
55
+ # @param caller caller
56
+ # @param method_opts method opts
57
+ # @param validate_opts validate opts
58
+ # @param retry_opts retry opts
59
+ # @param show_progress default false
60
+ def self.doreq( restclient_obj, path, method, caller, method_opts: {},validate_opts: {}, retry_opts: {}, show_progress: false)
61
+ res = nil
62
+ code = nil
63
+ data = method_opts.fetch(:data, nil)
64
+ method_opts.delete(:data)
65
+
66
+ # Retry loop due to:
67
+ # - 404 from Router API right after applying patch over a target
68
+ # - Intermittent connection reset from Manager API (HTTPS)
69
+ retries = retry_opts.fetch(:attempts, 10)
70
+ 1.upto(retries) do |try|
71
+ flag_error = false
72
+ # The request
73
+ begin
74
+ restclient_obj[path].send(method, *data, **method_opts) do |response, request, result|
75
+ res = validate_decode_response(response, request, result, validate_opts)
76
+ code = result.code.to_i
77
+ end
78
+ rescue Exception => error
79
+ ap error
80
+ flag_error = true
81
+ end
82
+ # Other conditionals to retry
83
+ unless retry_opts.empty?
84
+ if retry_opts.has_key?(:when_res)
85
+ flag_error = true if retry_opts[:when_res].include?(res)
86
+ end
87
+ if retry_opts.has_key?(:when_code)
88
+ flag_error = true if retry_opts[:when_code].include?(code)
89
+ end
90
+ end
91
+ return res unless flag_error # got response, break the loop
92
+ doReqMSG = sprintf "%d/%d", try, retries
93
+ if show_progress
94
+ ap doReqMSG
95
+ end
96
+ if try >= retries
97
+ ap doreq_code
98
+ return nil
99
+ else
100
+ sleep 1 # wait before next
101
+ end
102
+ end
103
+ end
104
+
105
+
106
+ # Return a valid decode response.
107
+ #
108
+ # @param response
109
+ # @param request
110
+ # @param result
111
+ # @param validate_opts
112
+ # @return [Object type] Array or Proc or String or Error
113
+ def self.validate_decode_response response, request, result, validate_opts
114
+ if validate_opts.has_key? :expected
115
+ expected = validate_opts[:expected]
116
+ case expected.class.name
117
+ when 'Array'
118
+ if validate_opts[:expected].include? response
119
+ return true
120
+ else
121
+ return false
122
+ end
123
+ when 'Proc'
124
+ response = expected.call(response, request, result)
125
+ return response
126
+ when 'String'
127
+ return result if validate_opts[:expected].eql? 'result'
128
+ return request if validate_opts[:expected].eql? 'request'
129
+ return response if validate_opts[:expected].eql? 'response'
130
+ else
131
+ ap expected.class.name
132
+ return response
133
+ end
134
+ else
135
+ return response
136
+ end
137
+ return true
138
+ end
139
+
140
+
141
+ end