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", | 	MagicCookieValue: "datasource", | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func buildExecutablePath(pluginDir, executable, os, arch string) string { | func composeBinaryName(executable, os, arch string) string { | ||||||
| 	return path.Join(pluginDir, fmt.Sprintf("%s_%s_%s", executable, strings.ToLower(os), strings.ToLower(arch))) | 	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 { | 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 { | 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{ | 	p.client = plugin.NewClient(&plugin.ClientConfig{ | ||||||
| 		HandshakeConfig:  handshakeConfig, | 		HandshakeConfig:  handshakeConfig, | ||||||
| 		Plugins:          map[string]plugin.Plugin{p.Id: &shared.TsdbPluginImpl{}}, | 		Plugins:          map[string]plugin.Plugin{p.Id: &shared.TsdbPluginImpl{}}, | ||||||
| 		Cmd:              exec.Command(cmd), | 		Cmd:              exec.Command(fullpath), | ||||||
| 		AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC}, | 		AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC}, | ||||||
| 		Logger:           LogWrapper{Logger: p.log}, | 		Logger:           LogWrapper{Logger: p.log}, | ||||||
| 	}) | 	}) | ||||||
|  |  | ||||||
|  | @ -1,12 +1,35 @@ | ||||||
| package plugins | 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") | 		expectedPath string | ||||||
| 	want := `/var/grafana/plugins/grafana-simple-json-datasource/simple-json_linux_amd64` | 	}{ | ||||||
| 	if have != want { | 		{ | ||||||
| 		t.Errorf("expected %s got %s", want, have) | 			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