This commit is contained in:
parent
0fc93545ce
commit
703ac28f52
16 changed files with 548 additions and 215 deletions
61
lib/commands/hunt.ml
Normal file
61
lib/commands/hunt.ml
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
let es_host = "nixos-search-7-1733963800.us-east-1.bonsaisearch.net"
|
||||
|
||||
let es_query term =
|
||||
Printf.sprintf
|
||||
{|{"from":0,"size":20,"sort":[{"_score":"desc","package_attr_name":"desc","package_pversion":"desc"}],"collapse":{"field":"package_attr_name"},"query":{"bool":{"must":[{"term":{"type":"package"}},{"multi_match":{"type":"cross_fields","query":"%s","fields":["package_attr_name^9","package_pname^6","package_description^1.3","package_longDescription^1"]}}]}}}|}
|
||||
term
|
||||
|
||||
let truncate n s = if String.length s > n then String.sub s 0 n ^ ".." else s
|
||||
|
||||
let run () =
|
||||
print_string Common.header;
|
||||
let argv_len = Array.length Sys.argv in
|
||||
if argv_len < 3 then (
|
||||
Common.meat_print "WHAT MEAT ARE YOU HUNTING?";
|
||||
print_string Common.footer)
|
||||
else
|
||||
let query =
|
||||
Array.sub Sys.argv 2 (argv_len - 2)
|
||||
|> Array.to_list |> String.concat " "
|
||||
in
|
||||
Common.meat_print ("HUNTING FOR " ^ Common.all_caps query ^ "..");
|
||||
let body = es_query query in
|
||||
let path = "/nixos-*-unstable-*/_search" in
|
||||
(try
|
||||
let resp = Http.https_post ~host:es_host ~path ~body in
|
||||
let json = Json.parse_json resp in
|
||||
let hits =
|
||||
match Option.bind (Json.jfield "hits" json) (fun h -> Json.jfield "hits" h) with
|
||||
| Some (`List items) -> items
|
||||
| _ -> []
|
||||
in
|
||||
if hits = [] then
|
||||
Common.meat_print "NO MEATS FOUND!"
|
||||
else
|
||||
List.iter
|
||||
(fun hit ->
|
||||
let src =
|
||||
match Json.jfield "_source" hit with Some s -> s | None -> `Null
|
||||
in
|
||||
let name =
|
||||
match Option.bind (Json.jfield "package_attr_name" src) Json.jstring with
|
||||
| Some s -> s
|
||||
| None -> "?"
|
||||
in
|
||||
let version =
|
||||
match Option.bind (Json.jfield "package_pversion" src) Json.jstring with
|
||||
| Some s -> s
|
||||
| None -> ""
|
||||
in
|
||||
let desc =
|
||||
match Option.bind (Json.jfield "package_description" src) Json.jstring with
|
||||
| Some s -> truncate 60 s
|
||||
| None -> ""
|
||||
in
|
||||
let ver_str = if version <> "" then " (" ^ version ^ ")" else "" in
|
||||
Printf.printf " \tnixpkgs#%s%s\n" name ver_str;
|
||||
if desc <> "" then Printf.printf " \t %s\n" desc)
|
||||
hits
|
||||
with e ->
|
||||
Common.meat_print ("HUNT FAILED: " ^ Printexc.to_string e));
|
||||
print_string Common.footer
|
||||
Loading…
Add table
Add a link
Reference in a new issue