-
Notifications
You must be signed in to change notification settings - Fork 0
/
diagramCreator.go
78 lines (69 loc) · 2.06 KB
/
diagramCreator.go
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package controller
import (
"github.com/Thiamath/repo2graph/pkg/controller/handlers"
"github.com/Thiamath/repo2graph/pkg/entities"
"github.com/pelletier/go-toml"
log "github.com/sirupsen/logrus"
"strings"
)
func GetDiagram(credentials map[string]string) (diagram *entities.Graph, err *entities.Error) {
ghToken := credentials[handlers.TOKEN]
repositories, err := handlers.GetRepositories(ghToken)
if err != nil {
log.Error(err)
return nil, err
}
nodes := craftNodesFromRepositories(repositories)
return &entities.Graph{
Nodes: nodes,
Edges: craftEdges(ghToken, nodes, nil),
}, nil
}
func craftNodesFromRepositories(repositories []*entities.Repository) (nodes []entities.Node) {
nodes = make([]entities.Node, len(repositories))
for ix, repository := range repositories {
nodes[ix] = entities.Node{
Id: repository.Id,
Label: repository.Name,
LinkedRepository: repository,
}
}
return nodes
}
func craftEdges(ghToken string, nodes []entities.Node, transform func(string, []entities.Node) []entities.Edge) (edges []entities.Edge) {
if transform != nil {
return transform(ghToken, nodes)
}
return nil
}
func customEdgeTransform(ghToken string, nodes []entities.Node) (edges []entities.Edge) {
edges = make([]entities.Edge, 0)
i := 1
for _, node := range nodes {
log.Info("Revised ", i, " of ", len(nodes))
i++
content, _ := handlers.GetFileFromRepository(ghToken, node.LinkedRepository, "/Gopkg.lock")
tomlContent, _ := toml.Load(content)
get := tomlContent.Get("projects")
if get != nil {
dependencies := get.([]*toml.Tree)
for _, dependency := range dependencies {
name := dependency.Get("name").(string)
split := strings.Split(name, "/")
if len(split) > 2 {
//host := split[0]
//owner := split[1]
repo := split[2]
//version := dependency.Get("version")
//log.Debug("name: ", name, "\thost: ", host, "\tversion: ", version)
edges = append(edges, entities.Edge{
From: node.Id,
To: repo,
Arrows: "to;middle",
})
}
}
}
}
return edges
}