1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package server
import (
"io/ioutil"
"os"
"path"
"gitlab.com/gitlab-org/gitaly-proto/go/gitalypb"
"gitlab.com/gitlab-org/gitaly/internal/config"
"gitlab.com/gitlab-org/gitaly/internal/git"
"gitlab.com/gitlab-org/gitaly/internal/version"
"golang.org/x/net/context"
)
func (s *server) ServerInfo(ctx context.Context, in *gitalypb.ServerInfoRequest) (*gitalypb.ServerInfoResponse, error) {
gitVersion, err := git.Version()
var storageStatuses []*gitalypb.ServerInfoResponse_StorageStatus
for _, shard := range config.Config.Storages {
readable, writeable := shardCheck(shard.Path)
storageStatuses = append(storageStatuses, &gitalypb.ServerInfoResponse_StorageStatus{
StorageName: shard.Name,
Readable: readable,
Writeable: writeable,
})
}
return &gitalypb.ServerInfoResponse{
ServerVersion: version.GetVersion(),
GitVersion: gitVersion,
StorageStatuses: storageStatuses,
}, err
}
func shardCheck(shardPath string) (readable bool, writeable bool) {
if _, err := os.Stat(shardPath); err == nil {
readable = true
}
// the path uses a `+` to avoid naming collisions
testPath := path.Join(shardPath, "+testWrite")
content := []byte("testWrite")
if err := ioutil.WriteFile(testPath, content, 0644); err == nil {
writeable = true
}
os.Remove(testPath)
return
}
|