// skate-dot generates dot files from inbound and outbound citation links. Just // a demo, replacement for a couple python scripts. package main import ( "context" "flag" "fmt" "io" "log" "os" "github.com/elastic/go-elasticsearch/esapi" elasticsearch "github.com/elastic/go-elasticsearch/v7" ) var ( es = flag.String("es", "http://localhost:9200", "elasticsearch holding fatcat_ref index") index = flag.String("x", "fatcat_ref_v01", "index name") fatcat = flag.String("f", "https://api.fatcat.wiki/v0", "fatcat api") ident = flag.String("i", "2kw3xjf2cbcmdlm3ihkoz2t4lu", "release ident") ) func main() { flag.Parse() cfg := elasticsearch.Config{Addresses: []string{*es}} es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatal(err) } client := &Client{ Api: *fatcat, Es: es, Index: *index, } client.Outbound(*ident) } // A client for fatcat and elasticsearch. type Client struct { Api string Es *elasticsearch.Client Index string } func (c *Client) String() string { info, _ := c.Es.Info() return fmt.Sprintf("%s %s (%s) %s", c.Api, info, elasticsearch.Version, c.Index) } func (c *Client) Inbound(ident string) []string { resp, err := c.Es.Search( c.Es.Search.WithContext(context.Background()), c.Es.Search.WithIndex(c.Index), ) if err != nil { log.Fatal(err) } io.Copy(os.Stdout, resp.Body) return nil } func (c *Client) Outbound(ident string) []string { req := &esapi.SearchRequest{ Query: fmt.Sprintf("source_release_ident:%s", ident), } resp, err := req.Do(context.Background(), c.Es) if err != nil { log.Fatal(err) } io.Copy(os.Stdout, resp.Body) return nil }