fluent-diagtool 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -1
- data/README.md +17 -3
- data/fluent-diagtool.gemspec +2 -2
- data/lib/fluent/diagtool/collectutils.rb +36 -12
- data/lib/fluent/diagtool/diagutils.rb +21 -12
- data/lib/fluent/diagtool/maskutils.rb +15 -5
- data/lib/fluent/diagtool/validutils.rb +2 -0
- data/lib/fluent/diagtool/version.rb +1 -1
- metadata +5 -6
- data/bin/diagtool.rb +0 -37
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: cec6d985c53b3d147c6d1eb5418ae15983b1bf2ec1bcd15f6c4c035f20a93cf3
         | 
| 4 | 
            +
              data.tar.gz: b58b0565d227ccc1f99d0dc3fbb482e03b1cb5faf38c9a5326fe753f0a222efc
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c1f5582d4f9835d158f09ee7256771406cf57c8753b6de9170c68d5b4f774ebb7397fce7fe70c8d247eb92bedf9f46a6af6f575b783a4718323b48a2a824b521
         | 
| 7 | 
            +
              data.tar.gz: 139b59e1c25cd34e745ba799d5c323c18421d3f5b4b95fbf9c59c63b75291e6663ee9a5cb43cb3cb8ac75ea99a1a495b6c3f9b731960643a93df0fc09e3ddfc1
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,12 +1,16 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                fluent-diagtool (0.1. | 
| 4 | 
            +
                fluent-diagtool (0.1.2)
         | 
| 5 | 
            +
                  fileutils (~> 1.0.2)
         | 
| 6 | 
            +
                  json (~> 2.1.0)
         | 
| 5 7 |  | 
| 6 8 | 
             
            GEM
         | 
| 7 9 | 
             
              remote: https://rubygems.org/
         | 
| 8 10 | 
             
              specs:
         | 
| 9 11 | 
             
                diff-lcs (1.3)
         | 
| 12 | 
            +
                fileutils (1.0.2)
         | 
| 13 | 
            +
                json (2.1.0)
         | 
| 10 14 | 
             
                rake (12.3.3)
         | 
| 11 15 | 
             
                rspec (3.9.0)
         | 
| 12 16 | 
             
                  rspec-core (~> 3.9.0)
         | 
    
        data/README.md
    CHANGED
    
    | @@ -22,10 +22,24 @@ The scope of data collection:<br> | |
| 22 22 | 
             
            ## Prerequisite
         | 
| 23 23 |  | 
| 24 24 |  | 
| 25 | 
            +
            ## Installation
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            ```
         | 
| 28 | 
            +
            # gem install fluent-diagtool
         | 
| 29 | 
            +
            Fetching: fileutils-1.0.2.gem (100%)
         | 
| 30 | 
            +
            Successfully installed fileutils-1.0.2
         | 
| 31 | 
            +
            Fetching: json-2.1.0.gem (100%)
         | 
| 32 | 
            +
            Building native extensions. This could take a while...
         | 
| 33 | 
            +
            Successfully installed json-2.1.0
         | 
| 34 | 
            +
            Fetching: fluent-diagtool-0.1.2.gem (100%)
         | 
| 35 | 
            +
            Successfully installed fluent-diagtool-0.1.2
         | 
| 36 | 
            +
            3 gems installed
         | 
| 37 | 
            +
            ```
         | 
| 38 | 
            +
             | 
| 25 39 | 
             
            ## Usage
         | 
| 26 40 | 
             
            ```
         | 
| 27 | 
            -
            #  | 
| 28 | 
            -
            Usage: diagtool | 
| 41 | 
            +
            # diagtool --help
         | 
| 42 | 
            +
            Usage: /usr/local/bin/diagtool -o OUTPUT_DIR -m {yes | no} -w {word1,[word2...]} -f {listfile} -s {hash seed}
         | 
| 29 43 | 
             
                -o, --output DIR                 Output directory (Mandatory)
         | 
| 30 44 | 
             
                -m, --mask yes|no                Enable mask function (Optional : Default=no)
         | 
| 31 45 | 
             
                -w, --word-list word1,word2      Provide a list of user-defined words which will to be masked (Optional : Default=None)
         | 
| @@ -43,7 +57,7 @@ NOTE: When user specified the keywork, only the exact match words will be masked | |
| 43 57 |  | 
| 44 58 | 
             
            #### Command sample:
         | 
| 45 59 | 
             
            ```
         | 
| 46 | 
            -
            #  | 
| 60 | 
            +
            # diagtool -o /tmp/work1 -w passwd1,passwd2 -f word_list_sample -m yes
         | 
| 47 61 | 
             
            2020-05-12 18:21:19 -0400: [Diagtool] [INFO] Parsing command options...
         | 
| 48 62 | 
             
            2020-05-12 18:21:19 -0400: [Diagtool] [INFO]    Option : Output directory = /tmp/work1
         | 
| 49 63 | 
             
            2020-05-12 18:21:19 -0400: [Diagtool] [INFO]    Option : Mask = yes
         | 
    
        data/fluent-diagtool.gemspec
    CHANGED
    
    | @@ -19,6 +19,6 @@ Gem::Specification.new do |spec| | |
| 19 19 | 
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 20 20 | 
             
              spec.require_paths = ["lib"]
         | 
| 21 21 |  | 
| 22 | 
            -
              spec.add_runtime_dependency("fileutils", ["~> 1.0 | 
| 23 | 
            -
              spec.add_runtime_dependency("json", ["~> 2.1 | 
| 22 | 
            +
              spec.add_runtime_dependency("fileutils", ["~> 1.0"])
         | 
| 23 | 
            +
              spec.add_runtime_dependency("json", ["~> 2.1"])
         | 
| 24 24 | 
             
            end
         | 
| @@ -25,9 +25,10 @@ module Diagtool | |
| 25 25 | 
             
                    "#{datetime}: [Diagutils] [#{severity}] #{msg}\n"
         | 
| 26 26 | 
             
                  })
         | 
| 27 27 | 
             
                  @time_format = conf[:time]
         | 
| 28 | 
            -
                  @ | 
| 28 | 
            +
                  @basedir = conf[:basedir]
         | 
| 29 29 | 
             
                  @workdir = conf[:workdir]
         | 
| 30 | 
            -
            			
         | 
| 30 | 
            +
                  @outdir = conf[:outdir]			
         | 
| 31 | 
            +
             | 
| 31 32 | 
             
                  @tdenv = get_tdenv()
         | 
| 32 33 | 
             
                  @tdconf = @tdenv['FLUENT_CONF'].split('/')[-1]
         | 
| 33 34 | 
             
                  @tdconf_path = @tdenv['FLUENT_CONF'].gsub(@tdconf,'')
         | 
| @@ -48,6 +49,7 @@ module Diagtool | |
| 48 49 | 
             
                  @logger.info("    td-agent log path = #{@tdlog_path}")
         | 
| 49 50 | 
             
                  @logger.info("    td-agent log = #{@tdlog}")
         | 
| 50 51 | 
             
                end
         | 
| 52 | 
            +
                
         | 
| 51 53 | 
             
                def get_osenv()
         | 
| 52 54 | 
             
                  stdout, stderr, status = Open3.capture3('hostnamectl')
         | 
| 53 55 | 
             
                  os_dict = {}
         | 
| @@ -60,6 +62,7 @@ module Diagtool | |
| 60 62 | 
             
                  end
         | 
| 61 63 | 
             
                  return os_dict
         | 
| 62 64 | 
             
                end
         | 
| 65 | 
            +
                
         | 
| 63 66 | 
             
                def get_tdenv()
         | 
| 64 67 | 
             
                  stdout, stderr, status = Open3.capture3('systemctl cat td-agent')
         | 
| 65 68 | 
             
                  env_dict = {}
         | 
| @@ -73,6 +76,7 @@ module Diagtool | |
| 73 76 | 
             
                  end
         | 
| 74 77 | 
             
                  return env_dict
         | 
| 75 78 | 
             
                end
         | 
| 79 | 
            +
                
         | 
| 76 80 | 
             
                def export_env()
         | 
| 77 81 | 
             
                  env = {
         | 
| 78 82 | 
             
                    :os => @osenv['Operating System'],
         | 
| @@ -84,60 +88,78 @@ module Diagtool | |
| 84 88 | 
             
                  }
         | 
| 85 89 | 
             
                  return env
         | 
| 86 90 | 
             
                end
         | 
| 91 | 
            +
                
         | 
| 87 92 | 
             
                def collect_tdconf()
         | 
| 88 93 | 
             
                  FileUtils.mkdir_p(@workdir+@tdconf_path)
         | 
| 89 94 | 
             
                  FileUtils.cp(@tdconf_path+@tdconf, @workdir+@tdconf_path)
         | 
| 90 95 | 
             
                  return @workdir+@tdconf_path+@tdconf
         | 
| 91 96 | 
             
                end
         | 
| 97 | 
            +
                
         | 
| 92 98 | 
             
                def collect_tdlog()
         | 
| 93 99 | 
             
                  FileUtils.mkdir_p(@workdir+@tdlog_path)
         | 
| 94 100 | 
             
                  FileUtils.cp_r(@tdlog_path, @workdir+@oslog_path)
         | 
| 95 101 | 
             
                  return Dir.glob(@workdir+@tdlog_path+@tdlog+'*')
         | 
| 96 102 | 
             
                end
         | 
| 103 | 
            +
                
         | 
| 97 104 | 
             
                def collect_sysctl()
         | 
| 98 105 | 
             
                  FileUtils.mkdir_p(@workdir+@sysctl_path)
         | 
| 99 106 | 
             
                  FileUtils.cp(@sysctl_path+@sysctl, @workdir+@sysctl_path)
         | 
| 100 107 | 
             
                  return @workdir+@sysctl_path+@sysctl
         | 
| 101 108 | 
             
                end
         | 
| 109 | 
            +
                
         | 
| 102 110 | 
             
                def collect_oslog()
         | 
| 103 111 | 
             
                  FileUtils.mkdir_p(@workdir+@oslog_path)
         | 
| 104 112 | 
             
                  FileUtils.cp(@oslog_path+@oslog, @workdir+@oslog_path)
         | 
| 105 113 | 
             
                  return @workdir+@oslog_path+@oslog
         | 
| 106 114 | 
             
                end
         | 
| 115 | 
            +
                
         | 
| 107 116 | 
             
                def collect_ulimit()
         | 
| 108 | 
            -
                  output = @ | 
| 117 | 
            +
                  output = @outdir+'/ulimit_n.output'
         | 
| 109 118 | 
             
                  stdout, stderr, status = Open3.capture3("ulimit -n")
         | 
| 110 119 | 
             
                  File.open(output, 'w') do |f|
         | 
| 111 120 | 
             
                    f.puts(stdout)
         | 
| 112 121 | 
             
                  end
         | 
| 113 122 | 
             
                  return output
         | 
| 114 123 | 
             
                end
         | 
| 124 | 
            +
               
         | 
| 125 | 
            +
                def collect_ps_eo()
         | 
| 126 | 
            +
                  output = @outdir+'/ps_eo.output'
         | 
| 127 | 
            +
                  stdout, stderr, status = Open3.capture3("ps -eo pid,ppid,stime,time,%mem,%cpu,cmd")
         | 
| 128 | 
            +
                  File.open(output, 'w') do |f|
         | 
| 129 | 
            +
                    f.puts(stdout)
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
                  return output
         | 
| 132 | 
            +
                end
         | 
| 133 | 
            +
             | 
| 115 134 | 
             
                def collect_meminfo()
         | 
| 116 | 
            -
                  output = @ | 
| 135 | 
            +
                  output = @outdir+'/meminfo.output'
         | 
| 117 136 | 
             
                  stdout, stderr, status = Open3.capture3("cat /proc/meminfo")
         | 
| 118 137 | 
             
                  File.open(output, 'w') do |f|
         | 
| 119 138 | 
             
                    f.puts(stdout)
         | 
| 120 139 | 
             
                  end
         | 
| 121 140 | 
             
                  return output
         | 
| 122 141 | 
             
                end
         | 
| 123 | 
            -
                 | 
| 124 | 
            -
             | 
| 125 | 
            -
                   | 
| 142 | 
            +
                
         | 
| 143 | 
            +
                def collect_netstat_plan()
         | 
| 144 | 
            +
                  output = @outdir+'/netstat_plan.output'
         | 
| 145 | 
            +
                  stdout, stderr, status = Open3.capture3("netstat -plan")
         | 
| 126 146 | 
             
                  File.open(output, 'w') do |f|
         | 
| 127 147 | 
             
                    f.puts(stdout)
         | 
| 128 148 | 
             
                  end
         | 
| 129 149 | 
             
                  return output
         | 
| 130 150 | 
             
                end
         | 
| 151 | 
            +
                
         | 
| 131 152 | 
             
                def collect_netstat_s()
         | 
| 132 | 
            -
                  output = @ | 
| 153 | 
            +
                  output = @outdir+'/netstat_s.output'
         | 
| 133 154 | 
             
                  stdout, stderr, status = Open3.capture3("netstat -s")
         | 
| 134 155 | 
             
                  File.open(output, 'w') do |f|
         | 
| 135 156 | 
             
                    f.puts(stdout)
         | 
| 136 157 | 
             
                  end
         | 
| 137 158 | 
             
                  return output
         | 
| 138 159 | 
             
                end
         | 
| 160 | 
            +
                
         | 
| 139 161 | 
             
                def collect_ntp(command)
         | 
| 140 | 
            -
                  output = @ | 
| 162 | 
            +
                  output = @outdir+'/ntp_info.output'
         | 
| 141 163 | 
             
                  stdout_date, stderr_date, status_date = Open3.capture3("date")
         | 
| 142 164 | 
             
                  stdout_ntp, stderr_ntp, status_ntp = Open3.capture3("chronyc sources") if command == "chrony"
         | 
| 143 165 | 
             
                  stdout_ntp, stderr_ntp, status_ntp = Open3.capture3("ntpq -p") if command == "ntp"
         | 
| @@ -147,19 +169,21 @@ module Diagtool | |
| 147 169 | 
             
                  end
         | 
| 148 170 | 
             
                  return output
         | 
| 149 171 | 
             
                end
         | 
| 172 | 
            +
                
         | 
| 150 173 | 
             
                def collect_tdgems()
         | 
| 151 | 
            -
                  output = @ | 
| 174 | 
            +
                  output = @outdir+'/tdgem_list.output'
         | 
| 152 175 | 
             
                  stdout, stderr, status = Open3.capture3("td-agent-gem list | grep fluent")
         | 
| 153 176 | 
             
                  File.open(output, 'w') do |f|
         | 
| 154 177 | 
             
                    f.puts(stdout)
         | 
| 155 178 | 
             
                  end
         | 
| 156 179 | 
             
                  return output
         | 
| 157 180 | 
             
                end
         | 
| 181 | 
            +
                
         | 
| 158 182 | 
             
                def compress_output()
         | 
| 159 | 
            -
                  Dir.chdir(@ | 
| 183 | 
            +
                  Dir.chdir(@basedir)
         | 
| 160 184 | 
             
                  tar_file = 'diagout-'+@time_format+'.tar.gz'
         | 
| 161 185 | 
             
                  stdout, stderr, status = Open3.capture3("tar cvfz #{tar_file} #{@time_format}")
         | 
| 162 | 
            -
                  return @ | 
| 186 | 
            +
                  return @basedir + '/' + tar_file
         | 
| 163 187 | 
             
                end
         | 
| 164 188 | 
             
              end
         | 
| 165 189 | 
             
            end
         | 
| @@ -28,8 +28,12 @@ module Diagtool | |
| 28 28 | 
             
                  @time_format = time.strftime("%Y%m%d%0k%M%0S")
         | 
| 29 29 | 
             
                  @conf = parse_diagconf(params)
         | 
| 30 30 | 
             
                  @conf[:time] = @time_format
         | 
| 31 | 
            -
                  @conf[:workdir] = @conf[: | 
| 31 | 
            +
                  @conf[:workdir] = @conf[:basedir] + '/' + @time_format
         | 
| 32 | 
            +
                  @conf[:outdir] = @conf[:workdir] + '/output'
         | 
| 33 | 
            +
                  
         | 
| 32 34 | 
             
                  FileUtils.mkdir_p(@conf[:workdir])
         | 
| 35 | 
            +
                  FileUtils.mkdir_p(@conf[:outdir])
         | 
| 36 | 
            +
                  
         | 
| 33 37 | 
             
                  diaglog = @conf[:workdir] + '/diagtool.output'
         | 
| 34 38 | 
             
                  @masklog = './mask_' + @time_format + '.json'
         | 
| 35 39 | 
             
                  @logger = Logger.new(STDOUT, formatter: proc {|severity, datetime, progname, msg|
         | 
| @@ -39,11 +43,12 @@ module Diagtool | |
| 39 43 | 
             
                    "#{datetime}: [Diagtool] [#{severity}] #{msg}\n"
         | 
| 40 44 | 
             
                  })
         | 
| 41 45 | 
             
                  diaglogger_info("Parsing command options...")
         | 
| 42 | 
            -
                  diaglogger_info("   Option : Output directory = #{@conf[: | 
| 46 | 
            +
                  diaglogger_info("   Option : Output directory = #{@conf[:basedir]}")
         | 
| 43 47 | 
             
                  diaglogger_info("   Option : Mask = #{@conf[:mask]}")
         | 
| 44 48 | 
             
                  diaglogger_info("   Option : Word list = #{@conf[:words]}")
         | 
| 45 49 | 
             
                  diaglogger_info("   Option : Hash Seed = #{@conf[:seed]}")
         | 
| 46 50 | 
             
                end
         | 
| 51 | 
            +
                
         | 
| 47 52 | 
             
                def diagtool()
         | 
| 48 53 | 
             
                  loglevel = 'WARN'
         | 
| 49 54 | 
             
                  diaglogger_info("Initializing parameters...")
         | 
| @@ -78,10 +83,14 @@ module Diagtool | |
| 78 83 | 
             
                    oslog = m.mask_tdlog(oslog, clean = true)
         | 
| 79 84 | 
             
                  end
         | 
| 80 85 | 
             
                  diaglogger_info("[Collect] config file is stored in #{oslog}")
         | 
| 81 | 
            -
             | 
| 86 | 
            +
             | 
| 87 | 
            +
                  diaglogger_info("[Collect] Collecting process information...")
         | 
| 88 | 
            +
                  meminfo = c.collect_ps_eo()
         | 
| 89 | 
            +
                  diaglogger_info("[Collect] process informationis stored in #{meminfo}")
         | 
| 90 | 
            +
             | 
| 82 91 | 
             
                  diaglogger_info("[Collect] Collecting OS memory information...")
         | 
| 83 92 | 
             
                  meminfo = c.collect_meminfo()
         | 
| 84 | 
            -
                  diaglogger_info("[Collect]  | 
| 93 | 
            +
                  diaglogger_info("[Collect] OS memory information is stored in #{meminfo}")
         | 
| 85 94 |  | 
| 86 95 | 
             
                  diaglogger_info("[Collect] Collecting date/time information...")
         | 
| 87 96 | 
             
                  if system('which chronyc > /dev/null 2>&1')
         | 
| @@ -95,7 +104,7 @@ module Diagtool | |
| 95 104 |  | 
| 96 105 | 
             
                  diaglogger_info("[Collect] Collecting netstat information...")
         | 
| 97 106 | 
             
                  if system('which netstat > /dev/null 2>&1')
         | 
| 98 | 
            -
                    netstat_n = c. | 
| 107 | 
            +
                    netstat_n = c.collect_netstat_plan()
         | 
| 99 108 | 
             
                    netstat_s = c.collect_netstat_s()
         | 
| 100 109 | 
             
                    if @conf[:mask] == 'yes'
         | 
| 101 110 | 
             
                      diaglogger_info("[Mask] Masking netstat file : #{netstat_n}...")
         | 
| @@ -158,17 +167,13 @@ module Diagtool | |
| 158 167 |  | 
| 159 168 | 
             
                def parse_diagconf(params)
         | 
| 160 169 | 
             
                  options = {
         | 
| 161 | 
            -
                    : | 
| 162 | 
            -
                    :mask => 'no',
         | 
| 163 | 
            -
                    :words => [],
         | 
| 164 | 
            -
                    :wfile => '',
         | 
| 165 | 
            -
                    :seed => ''
         | 
| 170 | 
            +
                    :basedir => '', :mask => '', :words => [], :wfile => '', :seed => ''
         | 
| 166 171 | 
             
                  }
         | 
| 167 172 | 
             
                  if params[:output] != nil
         | 
| 168 173 | 
             
                    if Dir.exist?(params[:output])
         | 
| 169 | 
            -
                      options[: | 
| 174 | 
            +
                      options[:basedir] = params[:output]
         | 
| 170 175 | 
             
                    else
         | 
| 171 | 
            -
                      raise "output directory '#{ | 
| 176 | 
            +
                      raise "output directory '#{basedir}' does not exist"
         | 
| 172 177 | 
             
                    end
         | 
| 173 178 | 
             
                  else
         | 
| 174 179 | 
             
                    raise "output directory '-o' must be specified"
         | 
| @@ -197,18 +202,22 @@ module Diagtool | |
| 197 202 | 
             
                  options[:seed] = params[:"hash-seed"] if params[:"hash-seed"] != nil
         | 
| 198 203 | 
             
                  return options	
         | 
| 199 204 | 
             
                end
         | 
| 205 | 
            +
                
         | 
| 200 206 | 
             
                def diaglogger_debug(str)
         | 
| 201 207 | 
             
                  @logger.debug(str)
         | 
| 202 208 | 
             
                  @logger_file.debug(str)
         | 
| 203 209 | 
             
                end
         | 
| 210 | 
            +
                
         | 
| 204 211 | 
             
                def diaglogger_info(str)
         | 
| 205 212 | 
             
                  @logger.info(str)
         | 
| 206 213 | 
             
                  @logger_file.info(str)
         | 
| 207 214 | 
             
                end
         | 
| 215 | 
            +
                
         | 
| 208 216 | 
             
                def diaglogger_warn(str)
         | 
| 209 217 | 
             
                  @logger.warn(str)
         | 
| 210 218 | 
             
                  @logger_file.warn(str)
         | 
| 211 219 | 
             
                end
         | 
| 220 | 
            +
                
         | 
| 212 221 | 
             
                def diaglogger_error(str)
         | 
| 213 222 | 
             
                  @logger.error(str)
         | 
| 214 223 | 
             
                  @logger_file.error(str)
         | 
| @@ -29,13 +29,10 @@ module Diagtool | |
| 29 29 | 
             
                  })
         | 
| 30 30 | 
             
                  @logger.debug("Initialize Maskutils: sanitized word = #{conf[:words]}")
         | 
| 31 31 | 
             
                  @hash_seed = conf[:seed]
         | 
| 32 | 
            -
                  @id = {
         | 
| 33 | 
            -
                    :fid =>'',
         | 
| 34 | 
            -
                    :lid =>'',
         | 
| 35 | 
            -
                    :cid =>''
         | 
| 36 | 
            -
                  }
         | 
| 32 | 
            +
                  @id = {}
         | 
| 37 33 | 
             
                  @masklog = Hash.new { |h,k| h[k] = Hash.new(&h.default_proc) }
         | 
| 38 34 | 
             
                end
         | 
| 35 | 
            +
                
         | 
| 39 36 | 
             
                def mask_tdlog(input_file, clean)
         | 
| 40 37 | 
             
                  line_id = 0
         | 
| 41 38 | 
             
                  f = File.open(input_file+'.mask', 'w')
         | 
| @@ -51,6 +48,7 @@ module Diagtool | |
| 51 48 | 
             
                  FileUtils.rm(input_file) if clean == true
         | 
| 52 49 | 
             
                  return input_file+'.mask'
         | 
| 53 50 | 
             
                end
         | 
| 51 | 
            +
                
         | 
| 54 52 | 
             
                def mask_tdlog_gz(input_file, clean)
         | 
| 55 53 | 
             
                  line_id = 0
         | 
| 56 54 | 
             
                  f = File.open(input_file+'.mask', 'w')
         | 
| @@ -68,6 +66,7 @@ module Diagtool | |
| 68 66 | 
             
                  FileUtils.rm(input_file) if clean == true
         | 
| 69 67 | 
             
                  return input_file+'.mask'
         | 
| 70 68 | 
             
                end
         | 
| 69 | 
            +
                
         | 
| 71 70 | 
             
                def mask_tdlog_inspector(line)
         | 
| 72 71 | 
             
                  i = 0
         | 
| 73 72 | 
             
                  contents=[]
         | 
| @@ -157,6 +156,7 @@ module Diagtool | |
| 157 156 | 
             
                  @logger.debug("Masked Line: #{line_masked}")
         | 
| 158 157 | 
             
                  return line_masked
         | 
| 159 158 | 
             
                end
         | 
| 159 | 
            +
                
         | 
| 160 160 | 
             
                def mask_direct_pattern(str)
         | 
| 161 161 | 
             
                  is_mask = false
         | 
| 162 162 | 
             
                  if str.include?(">")
         | 
| @@ -173,6 +173,7 @@ module Diagtool | |
| 173 173 | 
             
                  end
         | 
| 174 174 | 
             
                  return is_mask, str_mask
         | 
| 175 175 | 
             
                end	
         | 
| 176 | 
            +
                
         | 
| 176 177 | 
             
                def mask_url_pattern(str)
         | 
| 177 178 | 
             
                  is_mask = false
         | 
| 178 179 | 
             
                  url = str.split('://')
         | 
| @@ -215,6 +216,7 @@ module Diagtool | |
| 215 216 | 
             
                  str_mask << ":" if str.end_with?(':')
         | 
| 216 217 | 
             
                  return is_mask, str_mask
         | 
| 217 218 | 
             
                end
         | 
| 219 | 
            +
                
         | 
| 218 220 | 
             
                def mask_equal_pattern(str)
         | 
| 219 221 | 
             
                  is_mask = false
         | 
| 220 222 | 
             
                  l = str.split('=') ## Mask host=<address:ip/hostname> or bind=<address: ip/hostname>
         | 
| @@ -228,6 +230,7 @@ module Diagtool | |
| 228 230 | 
             
                  str_mask = l.join('=')
         | 
| 229 231 | 
             
                  return is_mask, str_mask
         | 
| 230 232 | 
             
                end
         | 
| 233 | 
            +
                
         | 
| 231 234 | 
             
                def mask_colon_pattern(str)
         | 
| 232 235 | 
             
                  is_mask = false
         | 
| 233 236 | 
             
                  l = str.split(':')
         | 
| @@ -242,6 +245,7 @@ module Diagtool | |
| 242 245 | 
             
                  str_mask << ":" if str.end_with?(':')
         | 
| 243 246 | 
             
                  return is_mask, str_mask
         | 
| 244 247 | 
             
                end
         | 
| 248 | 
            +
                
         | 
| 245 249 | 
             
                def mask_slash_pattern(str)
         | 
| 246 250 | 
             
                  is_mask = false
         | 
| 247 251 | 
             
                  l = str.split('/')
         | 
| @@ -256,14 +260,17 @@ module Diagtool | |
| 256 260 | 
             
                  str_mask << ":" if str.end_with?(':')
         | 
| 257 261 | 
             
                  return is_mask, str_mask
         | 
| 258 262 | 
             
                end
         | 
| 263 | 
            +
                
         | 
| 259 264 | 
             
                def is_ipv4?(str)
         | 
| 260 265 | 
             
                  !!(str =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)
         | 
| 261 266 | 
             
                end
         | 
| 267 | 
            +
                
         | 
| 262 268 | 
             
                def is_fqdn?(str)
         | 
| 263 269 | 
             
                  #!!(str =~ /^\b((?=[a-z0-9-]{1,63}\.)[a-z0-9]+(-[a-z0-9]+)*\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/)
         | 
| 264 270 | 
             
                  !!(str =~ /^\b(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.){2,}([A-Za-z]|[A-Za-z][A-Za-z\-]*[A-Za-z]){2,}$/)
         | 
| 265 271 | 
             
                  #!!(str =~ /^\b(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)/)
         | 
| 266 272 | 
             
                end
         | 
| 273 | 
            +
                
         | 
| 267 274 | 
             
                def is_words?(str)
         | 
| 268 275 | 
             
                  value = false
         | 
| 269 276 | 
             
                  @words.each do | l |
         | 
| @@ -274,6 +281,7 @@ module Diagtool | |
| 274 281 | 
             
                  end
         | 
| 275 282 | 
             
                  return value
         | 
| 276 283 | 
             
                end
         | 
| 284 | 
            +
                
         | 
| 277 285 | 
             
                def mask_ipv4_fqdn_words(str)
         | 
| 278 286 | 
             
                  str = str.to_s
         | 
| 279 287 | 
             
                  mtype = ''
         | 
| @@ -299,11 +307,13 @@ module Diagtool | |
| 299 307 | 
             
                  end
         | 
| 300 308 | 
             
                  return is_mask, str, str_mask
         | 
| 301 309 | 
             
                end
         | 
| 310 | 
            +
                
         | 
| 302 311 | 
             
                def put_masklog(str, str_mask)
         | 
| 303 312 | 
             
                  uid = "Line#{@id[:lid]}-#{@id[:cid]}"
         | 
| 304 313 | 
             
                  @masklog[@id[:fid]][uid]['original'] = str
         | 
| 305 314 | 
             
                  @masklog[@id[:fid]][uid]['mask'] = str_mask
         | 
| 306 315 | 
             
                end
         | 
| 316 | 
            +
                
         | 
| 307 317 | 
             
                def export_masklog(output_file)
         | 
| 308 318 | 
             
                  masklog_json = JSON.pretty_generate(@masklog)
         | 
| 309 319 | 
             
                  File.open(output_file, 'w') do |f|
         | 
| @@ -38,6 +38,7 @@ module Diagtool | |
| 38 38 | 
             
                  @logger.debug("    Default ulimit: #{@def_ulimit}")
         | 
| 39 39 | 
             
                  @logger.debug("    Default sysctl: #{@def_sysctl}")
         | 
| 40 40 | 
             
                end
         | 
| 41 | 
            +
                
         | 
| 41 42 | 
             
                def valid_ulimit(ulimit_file)
         | 
| 42 43 | 
             
                  @logger.info("Loading ulimit file: #{ulimit_file}")
         | 
| 43 44 | 
             
                  File.readlines(ulimit_file).each { |line|
         | 
| @@ -50,6 +51,7 @@ module Diagtool | |
| 50 51 | 
             
                    end 
         | 
| 51 52 | 
             
                  }
         | 
| 52 53 | 
             
                end
         | 
| 54 | 
            +
                
         | 
| 53 55 | 
             
                def valid_sysctl(sysctl_file)
         | 
| 54 56 | 
             
                  h = Hash.new()
         | 
| 55 57 | 
             
                  v = Hash.new { |i,j| i[j] = Hash.new(&h.default_proc) }
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluent-diagtool
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - kubotat
         | 
| @@ -16,28 +16,28 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 1.0 | 
| 19 | 
            +
                    version: '1.0'
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 1.0 | 
| 26 | 
            +
                    version: '1.0'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: json
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 2.1 | 
| 33 | 
            +
                    version: '2.1'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 2.1 | 
| 40 | 
            +
                    version: '2.1'
         | 
| 41 41 | 
             
            description: Bringing productivity of trouble shooting to the next level  by automating
         | 
| 42 42 | 
             
              collection of Fluentd configurations, settings and OS parameters as well as masking
         | 
| 43 43 | 
             
              sensitive information in logs and configurations.
         | 
| @@ -55,7 +55,6 @@ files: | |
| 55 55 | 
             
            - README.md
         | 
| 56 56 | 
             
            - Rakefile
         | 
| 57 57 | 
             
            - bin/console
         | 
| 58 | 
            -
            - bin/diagtool.rb
         | 
| 59 58 | 
             
            - bin/setup
         | 
| 60 59 | 
             
            - bin/word_list_sample
         | 
| 61 60 | 
             
            - exe/diagtool
         | 
    
        data/bin/diagtool.rb
    DELETED
    
    | @@ -1,37 +0,0 @@ | |
| 1 | 
            -
            #
         | 
| 2 | 
            -
            # Fluentd
         | 
| 3 | 
            -
            #
         | 
| 4 | 
            -
            #    Licensed under the Apache License, Version 2.0 (the "License");
         | 
| 5 | 
            -
            #    you may not use this file except in compliance with the License.
         | 
| 6 | 
            -
            #    You may obtain a copy of the License at
         | 
| 7 | 
            -
            #
         | 
| 8 | 
            -
            #        http://www.apache.org/licenses/LICENSE-2.0
         | 
| 9 | 
            -
            #
         | 
| 10 | 
            -
            #    Unless required by applicable law or agreed to in writing, software
         | 
| 11 | 
            -
            #    distributed under the License is distributed on an "AS IS" BASIS,
         | 
| 12 | 
            -
            #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 13 | 
            -
            #    See the License for the specific language governing permissions and
         | 
| 14 | 
            -
            #    limitations under the License.
         | 
| 15 | 
            -
            #
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            #!/usr/bin/ruby
         | 
| 18 | 
            -
            require 'optparse'
         | 
| 19 | 
            -
            require '../lib/collectutils'
         | 
| 20 | 
            -
            require '../lib/maskutils'
         | 
| 21 | 
            -
            require '../lib/validutils'
         | 
| 22 | 
            -
            require '../lib/diagutils'
         | 
| 23 | 
            -
            include Diagtool
         | 
| 24 | 
            -
             | 
| 25 | 
            -
            params = {}
         | 
| 26 | 
            -
            OptionParser.new do |opt|
         | 
| 27 | 
            -
              opt.banner = "Usage: #{$0} -o OUTPUT_DIR -m {yes | no} -w {word1,[word2...]} -f {listfile} -s {hash seed}"
         | 
| 28 | 
            -
              opt.on('-o','--output DIR', String, 'Output directory (Mandatory)')
         | 
| 29 | 
            -
              opt.on('-m','--mask yes|no', String, 'Enable mask function (Optional : Default=no)')
         | 
| 30 | 
            -
              opt.on('-w','--word-list word1,word2', Array, 'Provide a list of user-defined words which will to be masked (Optional : Default=None)')
         | 
| 31 | 
            -
              opt.on('-f','--word-file listfile', String, 'provide a file which describes a List of user-defined words (Optional : Default=None)')
         | 
| 32 | 
            -
              opt.on('-s','--hash-seed seed', String, 'provide a word which will be used when generate the mask (Optional : Default=None)')
         | 
| 33 | 
            -
            end.parse!(into: params)
         | 
| 34 | 
            -
            diag = DiagUtils.new(params)
         | 
| 35 | 
            -
            diag.diagtool()
         | 
| 36 | 
            -
             | 
| 37 | 
            -
             |