mirror of https://github.com/grafana/grafana.git
				
				
				
			supports windows compatible plugin binaries
This commit is contained in:
		
							parent
							
								
									ebd8677607
								
							
						
					
					
						commit
						1fd40a48d9
					
				|  | @ -65,8 +65,14 @@ var handshakeConfig = plugin.HandshakeConfig{ | |||
| 	MagicCookieValue: "datasource", | ||||
| } | ||||
| 
 | ||||
| func buildExecutablePath(pluginDir, executable, os, arch string) string { | ||||
| 	return path.Join(pluginDir, fmt.Sprintf("%s_%s_%s", executable, strings.ToLower(os), strings.ToLower(arch))) | ||||
| func composeBinaryName(executable, os, arch string) string { | ||||
| 	var extension string | ||||
| 	os = strings.ToLower(os) | ||||
| 	if os == "windows" { | ||||
| 		extension = ".exe" | ||||
| 	} | ||||
| 
 | ||||
| 	return fmt.Sprintf("%s_%s_%s%s", executable, os, strings.ToLower(arch), extension) | ||||
| } | ||||
| 
 | ||||
| func (p *DataSourcePlugin) initBackendPlugin(ctx context.Context, log log.Logger) error { | ||||
|  | @ -81,12 +87,13 @@ func (p *DataSourcePlugin) initBackendPlugin(ctx context.Context, log log.Logger | |||
| } | ||||
| 
 | ||||
| func (p *DataSourcePlugin) spawnSubProcess() error { | ||||
| 	cmd := buildExecutablePath(p.PluginDir, p.Executable, runtime.GOOS, runtime.GOARCH) | ||||
| 	cmd := composeBinaryName(p.Executable, runtime.GOOS, runtime.GOARCH) | ||||
| 	fullpath := path.Join(p.PluginDir, cmd) | ||||
| 
 | ||||
| 	p.client = plugin.NewClient(&plugin.ClientConfig{ | ||||
| 		HandshakeConfig:  handshakeConfig, | ||||
| 		Plugins:          map[string]plugin.Plugin{p.Id: &shared.TsdbPluginImpl{}}, | ||||
| 		Cmd:              exec.Command(cmd), | ||||
| 		Cmd:              exec.Command(fullpath), | ||||
| 		AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC}, | ||||
| 		Logger:           LogWrapper{Logger: p.log}, | ||||
| 	}) | ||||
|  |  | |||
|  | @ -1,12 +1,35 @@ | |||
| package plugins | ||||
| 
 | ||||
| import "testing" | ||||
| import ( | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| func TestExecutablePathBuilder(t *testing.T) { | ||||
| func TestComposeBinaryName(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name string | ||||
| 		os   string | ||||
| 		arch string | ||||
| 
 | ||||
| 	have := buildExecutablePath("/var/grafana/plugins/grafana-simple-json-datasource", "simple-json", "linux", "amd64") | ||||
| 	want := `/var/grafana/plugins/grafana-simple-json-datasource/simple-json_linux_amd64` | ||||
| 	if have != want { | ||||
| 		t.Errorf("expected %s got %s", want, have) | ||||
| 		expectedPath string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:         "simple-json", | ||||
| 			os:           "linux", | ||||
| 			arch:         "amd64", | ||||
| 			expectedPath: `simple-json_linux_amd64`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:         "simple-json", | ||||
| 			os:           "windows", | ||||
| 			arch:         "amd64", | ||||
| 			expectedPath: `simple-json_windows_amd64.exe`, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, v := range tests { | ||||
| 		have := composeBinaryName(v.name, v.os, v.arch) | ||||
| 		if have != v.expectedPath { | ||||
| 			t.Errorf("expected %s got %s", v.expectedPath, have) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue