Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Diff mappings #45

Open
xsaamiir opened this issue Mar 25, 2019 · 4 comments
Open

Diff mappings #45

xsaamiir opened this issue Mar 25, 2019 · 4 comments

Comments

@xsaamiir
Copy link
Contributor

xsaamiir commented Mar 25, 2019

I saw in the functionality diff mappings in the roadmap.
Have you already given any thought on how should this be implemented ? (calling git from the go code?)

The desired behaviour of this functionality using the CLI, I guess would be to print the diff git style on the console, but how should this functionality behave when vulcanizer is used as a library ?

@nickcanz
Copy link
Contributor

Thanks for the question! I admit, this feature might not be the most useful, so I don't think it's worth spending a lot of time on.

The idea would be if you had several time series indices on a cluster to be able to compare logs-2019-02-01 and logs-2019-03-01 and see if any of the mappings had changed between those two indices. The output could be a string similar to the go-comp output.

@leosunmo
Copy link
Contributor

leosunmo commented Jul 6, 2020

I've got a POC going with https://github.com/nsf/jsondiff
image

The problem is that the output is absolutely massive because of the mapping file sizes.

I was working on a custom reporter for https://github.com/google/go-cmp but it was a bit over my head. The default settings for go-cmp is very verbose, so we would need a custom reporter, as seen here: https://pkg.go.dev/github.com/google/go-cmp/cmp@v0.5.0?tab=doc#example-Reporter.

The example reporter only outputs the actual diff with the path leading up to that, but it's still very dense so would need some customisation.

root
["mappings"]
 .(map[string]interface {})
  ["kube-logs"]
   .(map[string]interface {})
    ["properties"]
     .(map[string]interface {})
      ["extra"]
       .(map[string]interface {})
        ["properties"]
         .(map[string]interface {})
          ["req"]
           .(map[string]interface {})
            ["properties"]
             .(map[string]interface {})
              ["headers"]
               .(map[string]interface {})
                ["properties"]
                 .(map[string]interface {})
                  ["dnt"]
                   :
	-: <invalid reflect.Value>
	+: map[fields:map[keyword:map[ignore_above:256 type:keyword]] norms:false type:text]

root
["mappings"]
 .(map[string]interface {})
  ["kube-logs"]
   .(map[string]interface {})
    ["properties"]
     .(map[string]interface {})
      ["message_args"]
       .(map[string]interface {})
        ["fields"]
         :
	-: map[keyword:map[ignore_above:256 type:keyword]]
	+: <invalid reflect.Value>

I also have some reflect value issues here.

@leosunmo
Copy link
Contributor

leosunmo commented Jul 6, 2020

The main issue for go-cmp is that we don't have a struct this can be marshalled in to, so everything is a map[string]interface {}

@leosunmo
Copy link
Contributor

It looks like nsf/jsondiff#6 was finally solved! Going to give it a try

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants