oxidized-web icon indicating copy to clipboard operation
oxidized-web copied to clipboard

conf_search does not work with files output

Open Alexanderis opened this issue 8 years ago • 7 comments

This works with GIT output but fails when file is selected with the following error and backtrace:

TypeError at /nodes/conf_search no implicit conversion of Regexp into Integer file: webapp.rb location: [] line: 55

/var/lib/gems/2.3.0/gems/oxidized-web-0.7.1/lib/oxidized/web/webapp.rb in []
          if config[@to_research]
/var/lib/gems/2.3.0/gems/oxidized-web-0.7.1/lib/oxidized/web/webapp.rb in block (2 levels) in <class:WebApp>
          if config[@to_research]
/var/lib/gems/2.3.0/gems/oxidized-web-0.7.1/lib/oxidized/web/webapp.rb in map
        nodes_list.each do |n|
/var/lib/gems/2.3.0/gems/oxidized-web-0.7.1/lib/oxidized/web/webapp.rb in each
        nodes_list.each do |n|
/var/lib/gems/2.3.0/gems/oxidized-web-0.7.1/lib/oxidized/web/webapp.rb in block in <class:WebApp>
        nodes_list.each do |n|
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in call
          proc { |a,p| unbound_method.bind(a).call }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in compile!
          proc { |a,p| unbound_method.bind(a).call }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block (3 levels) in route!
            route_eval { block[*args] }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in route_eval
      throw :halt, yield
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block (2 levels) in route!
            route_eval { block[*args] }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in process_route
        block ? block[self, values] : yield(self, values)
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in catch
      catch(:pass) do
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in process_route
      catch(:pass) do
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in route!
          returned_pass_block = process_route(pattern, keys, conditions) do |*args|
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in each
        routes.each do |pattern, keys, conditions, block|
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in route!
        routes.each do |pattern, keys, conditions, block|
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in dispatch!
        route!
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in invoke
      res = catch(:halt) { yield }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in catch
      res = catch(:halt) { yield }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in invoke
      res = catch(:halt) { yield }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in dispatch!
      invoke do
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in call!
      invoke { dispatch! }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in invoke
      res = catch(:halt) { yield }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in catch
      res = catch(:halt) { yield }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in invoke
      res = catch(:halt) { yield }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in call!
      invoke { dispatch! }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in call
      dup.call!(env)
/var/lib/gems/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb in call
        status, headers, body = @app.call(env)
/var/lib/gems/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb in call
        app.call env
/var/lib/gems/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb in call
        status, headers, body = app.call(env)
/var/lib/gems/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb in call
        result or app.call(env)
/var/lib/gems/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb in call
        result or app.call(env)
/var/lib/gems/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb in call
        status, headers, body        = @app.call(env)
/var/lib/gems/2.3.0/gems/rack-1.6.4/lib/rack/nulllogger.rb in call
      @app.call(env)
/var/lib/gems/2.3.0/gems/rack-1.6.4/lib/rack/head.rb in call
    status, headers, body = @app.call(env)
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/show_exceptions.rb in call
      @app.call(env)
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in call
      result, callback = app.call(env), env['async.callback']
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in call
      @stack.call(env)
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in block in call
        synchronize { prototype.call(env) }
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in synchronize
          yield
/var/lib/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb in call
        synchronize { prototype.call(env) }
/var/lib/gems/2.3.0/gems/rack-1.6.4/lib/rack/urlmap.rb in block in call
        return app.call(env)
/var/lib/gems/2.3.0/gems/rack-1.6.4/lib/rack/urlmap.rb in each
      @mapping.each do |host, location, match, app|
/var/lib/gems/2.3.0/gems/rack-1.6.4/lib/rack/urlmap.rb in call
      @mapping.each do |host, location, match, app|
/var/lib/gems/2.3.0/gems/rack-1.6.4/lib/rack/builder.rb in call
      to_app.call(env)
/var/lib/gems/2.3.0/gems/puma-2.16.0/lib/puma/server.rb in handle_request
          status, headers, res_body = @app.call(env)
/var/lib/gems/2.3.0/gems/puma-2.16.0/lib/puma/server.rb in process_client
          case handle_request(client, buffer)
/var/lib/gems/2.3.0/gems/puma-2.16.0/lib/puma/server.rb in block in run
            process_client client, buffer
/var/lib/gems/2.3.0/gems/puma-2.16.0/lib/puma/thread_pool.rb in block in spawn_thread
            block.call(work, *extra)

Alexanderis avatar Oct 25 '16 20:10 Alexanderis

file.rb's fetch likely is the culprit. It seems fetch may not be returning a string but an array.

When you're doing this, are you also running groups?

ytti avatar Oct 26 '16 10:10 ytti

Can you try after this change: https://github.com/ytti/oxidized/commit/449522554473f4b9a261ec06ee6961defb30f7bb

ytti avatar Oct 26 '16 10:10 ytti

Works when all files are where they are suppose to be. However if a node doesn't have a file it errors out. After I created a file for every node with issues the search worked.

Errno::ENOENT at /nodes/conf_search No such file or directory @ rb_sysopen - /etc/oxidized/GROUP/node-name

/var/lib/gems/2.3.0/gems/oxidized-0.16.3/lib/oxidized/output/file.rb in read File.read File.join(cfg_dir, node_name) /var/lib/gems/2.3.0/gems/oxidized-0.16.3/lib/oxidized/output/file.rb in fetch File.read File.join(cfg_dir, node_name) /var/lib/gems/2.3.0/gems/oxidized-0.16.3/lib/oxidized/nodes.rb in block in fetch output.fetch node, group

Alexanderis avatar Oct 26 '16 15:10 Alexanderis

I changed it to return nil, if file can't be found, I'm not sure that is actually sensible, of perhaps we should raise the ENOENT error, and let consumer (oxidized-web) figure out what to do when file is not found, perhaps complain in the webpage for example.

ytti avatar Oct 26 '16 19:10 ytti

I'm not sure if this is related, but since I use file output and I'm having issue with search, I thought I'd leave a comment here.

When trying to search in conf files, I get this error:

ArgumentError at /nodes/conf_search
invalid byte sequence in UTF-8
file: webapp.rb location: [] line: 57

Could this be related, or should I open up a new issue?

acederlund avatar Apr 09 '19 07:04 acederlund

I have the same error as acederlund above. Is there any solution known?

Thank you.

gjvdlee avatar May 24 '21 10:05 gjvdlee

I have the same error 5 years later :-(

prnzngr avatar Sep 28 '21 05:09 prnzngr