diff mbox series

[bug#65118,9/9] gnu: Add nsq.

Message ID 8520b8137aea74779901aa314e26e2b635eeadb9.1691350701.git.sharlatanus@gmail.com
State New
Headers show
Series : gnu: Add NSQ. | expand

Commit Message

Sharlatan Hellseher Aug. 6, 2023, 7:55 p.m. UTC
* gnu/packages/high-availability.scm (nsq): New variable.
---
 gnu/packages/high-availability.scm | 87 ++++++++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

Comments

Maxim Cournoyer Aug. 27, 2023, 2:02 a.m. UTC | #1
Hello!

Sharlatan Hellseher <sharlatanus@gmail.com> writes:

> * gnu/packages/high-availability.scm (nsq): New variable.
> ---
>  gnu/packages/high-availability.scm | 87 ++++++++++++++++++++++++++++++
>  1 file changed, 87 insertions(+)
>
> diff --git a/gnu/packages/high-availability.scm b/gnu/packages/high-availability.scm
> index 11ff8014cf..9763a04b21 100644
> --- a/gnu/packages/high-availability.scm
> +++ b/gnu/packages/high-availability.scm
> @@ -34,6 +34,7 @@ (define-module (gnu packages high-availability)
>    #:use-module (gnu packages gcc)
>    #:use-module (gnu packages gettext)
>    #:use-module (gnu packages glib)
> +  #:use-module (gnu packages golang)
>    #:use-module (gnu packages hardware)
>    #:use-module (gnu packages linux)
>    #:use-module (gnu packages lua)
> @@ -43,12 +44,14 @@ (define-module (gnu packages high-availability)
>    #:use-module (gnu packages pkg-config)
>    #:use-module (gnu packages python)
>    #:use-module (gnu packages rsync)
> +  #:use-module (gnu packages syncthing)
>    #:use-module (gnu packages tls)
>    #:use-module (gnu packages valgrind)
>    #:use-module (gnu packages version-control)
>    #:use-module (gnu packages xml)
>    #:use-module (gnu packages)
>    #:use-module (guix build-system gnu)
> +  #:use-module (guix build-system go)
>    #:use-module (guix download)
>    #:use-module (guix gexp)
>    #:use-module (guix git-download)
> @@ -190,6 +193,90 @@ (define-public kronosnet
>   in general better performances compared to the old network protocol.")
>      (license (list license:gpl2+ license:lgpl2.1+))))
>
> +(define-public nsq
> +  (package
> +    (name "nsq")
> +    (version "1.2.1")
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri (git-reference
> +             (url "https://github.com/nsqio/nsq")
> +             (commit (string-append "v" version))))
> +       (file-name (git-file-name name version))
> +       (sha256
> +        (base32 "0ajqjwfn06zsmz21z9mkl4cblarypaf20228pqcd1293zl6y3ry8"))))
> +    (build-system go-build-system)
> +    (arguments
> +     (list
> +      #:import-path "github.com/nsqio/nsq"
> +      #:install-source? #f
> +      #:phases
> +      #~(modify-phases %standard-phases
> +          (replace 'build
> +            (lambda* (#:key import-path #:allow-other-keys)
> +              (with-directory-excursion (string-append "src/" import-path)
> +                (invoke "make"))))
> +          (replace 'check
> +            (lambda* (#:key tests? import-path #:allow-other-keys)
> +              (when tests?
> +                (setenv "HOME" "/tmp")
> +                (with-directory-excursion (string-append "src/" import-path)
> +                  (invoke #$@(if (string-prefix? "x86_64-linux"
> +                                                 (or (%current-system)
> +                                                     (%current-target-system)))

The target should be checked before the system, as current-system is
always defined, and would shortcut the or.  But you can now safely
forget about this detail and use the 'target-x86?' procedure instead,
which comes from (guix tilers).

> +                                 (list "go" "test" "-v" "-race" "./...")
> +                                 (list "go" "test" "-v" "./...")))))))
> +          (replace 'install
> +            (lambda* (#:key import-path #:allow-other-keys)
> +              (with-directory-excursion (string-append "src/" import-path)
> +                (invoke "make" (string-append "PREFIX=" #$output)
> +                        "install")))))))
> +    (native-inputs
> +     (list go-github-com-bitly-go-hostpool
> +           go-github-com-bitly-timer-metrics
> +           go-github-com-blang-semver
> +           go-github-com-bmizerany-perks-quantile
> +           go-github-com-burntsushi-toml
> +           go-github-com-davecgh-go-spew
> +           go-github-com-golang-snappy ; Move to (gnu packages golang)
> +           go-github-com-mreiferson-go-svc
> +           go-github-com-julienschmidt-httprouter
> +           go-github-com-mreiferson-go-options
> +           go-github-com-mreiferson-go-svc
> +           go-github-com-nsqio-go-diskqueue
> +           go-github-com-nsqio-go-nsq
> +           python-wrapper))
> +    (home-page "https://nsq.io")
> +    (synopsis "Realtime distributed messaging platform")
> +    (description
> +     "NSQ is a realtime distributed messaging platform designed to operate at
> +scale, handling billions of messages per day.
> +
> +Key features:
> +@itemize
> +@item support distributed topologies with no SPOF

What is SPOF?

> +@item horizontally scalable (no brokers, seamlessly add more nodes to the
> +cluster)
> +@item low-latency push based message delivery (performance)
> +@item combination load-balanced and multicast style message routing

I'd replace 'combination' here with the 'combine' verb.

> +@item excel at both streaming (high-throughput) and job oriented
> +(low-throughput) workloads
> +@item primarily in-memory (beyond a high-water mark messages are transparently
> +kept on disk)
> +@item runtime discovery service for consumers to find producers (nsqlookupd)
> +@item transport layer security (TLS)
> +@item data format agnostic
> +@item few dependencies (easy to deploy) and a sane, bounded, default
> +configuration
> +@item simple TCP protocol supporting client libraries in any language
> +@item HTTP interface for stats, admin actions, and producers (no client
> +library needed to publish)
> +@item integrates with statsd for realtime instrumentation

The imperative rather than descriptive verb tense is used elsewhere
here, I'd stick with it (integrate with ...).

Could you send a v2 addressing the above?
diff mbox series

Patch

diff --git a/gnu/packages/high-availability.scm b/gnu/packages/high-availability.scm
index 11ff8014cf..9763a04b21 100644
--- a/gnu/packages/high-availability.scm
+++ b/gnu/packages/high-availability.scm
@@ -34,6 +34,7 @@  (define-module (gnu packages high-availability)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages hardware)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
@@ -43,12 +44,14 @@  (define-module (gnu packages high-availability)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages rsync)
+  #:use-module (gnu packages syncthing)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
@@ -190,6 +193,90 @@  (define-public kronosnet
  in general better performances compared to the old network protocol.")
     (license (list license:gpl2+ license:lgpl2.1+))))
 
+(define-public nsq
+  (package
+    (name "nsq")
+    (version "1.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nsqio/nsq")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ajqjwfn06zsmz21z9mkl4cblarypaf20228pqcd1293zl6y3ry8"))))
+    (build-system go-build-system)
+    (arguments
+     (list
+      #:import-path "github.com/nsqio/nsq"
+      #:install-source? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'build
+            (lambda* (#:key import-path #:allow-other-keys)
+              (with-directory-excursion (string-append "src/" import-path)
+                (invoke "make"))))
+          (replace 'check
+            (lambda* (#:key tests? import-path #:allow-other-keys)
+              (when tests?
+                (setenv "HOME" "/tmp")
+                (with-directory-excursion (string-append "src/" import-path)
+                  (invoke #$@(if (string-prefix? "x86_64-linux"
+                                                 (or (%current-system)
+                                                     (%current-target-system)))
+                                 (list "go" "test" "-v" "-race" "./...")
+                                 (list "go" "test" "-v" "./...")))))))
+          (replace 'install
+            (lambda* (#:key import-path #:allow-other-keys)
+              (with-directory-excursion (string-append "src/" import-path)
+                (invoke "make" (string-append "PREFIX=" #$output)
+                        "install")))))))
+    (native-inputs
+     (list go-github-com-bitly-go-hostpool
+           go-github-com-bitly-timer-metrics
+           go-github-com-blang-semver
+           go-github-com-bmizerany-perks-quantile
+           go-github-com-burntsushi-toml
+           go-github-com-davecgh-go-spew
+           go-github-com-golang-snappy ; Move to (gnu packages golang)
+           go-github-com-mreiferson-go-svc
+           go-github-com-julienschmidt-httprouter
+           go-github-com-mreiferson-go-options
+           go-github-com-mreiferson-go-svc
+           go-github-com-nsqio-go-diskqueue
+           go-github-com-nsqio-go-nsq
+           python-wrapper))
+    (home-page "https://nsq.io")
+    (synopsis "Realtime distributed messaging platform")
+    (description
+     "NSQ is a realtime distributed messaging platform designed to operate at
+scale, handling billions of messages per day.
+
+Key features:
+@itemize
+@item support distributed topologies with no SPOF
+@item horizontally scalable (no brokers, seamlessly add more nodes to the
+cluster)
+@item low-latency push based message delivery (performance)
+@item combination load-balanced and multicast style message routing
+@item excel at both streaming (high-throughput) and job oriented
+(low-throughput) workloads
+@item primarily in-memory (beyond a high-water mark messages are transparently
+kept on disk)
+@item runtime discovery service for consumers to find producers (nsqlookupd)
+@item transport layer security (TLS)
+@item data format agnostic
+@item few dependencies (easy to deploy) and a sane, bounded, default
+configuration
+@item simple TCP protocol supporting client libraries in any language
+@item HTTP interface for stats, admin actions, and producers (no client
+library needed to publish)
+@item integrates with statsd for realtime instrumentation
+@item robust cluster administration interface (nsqadmin)
+@end itemize")
+    (license license:expat)))
+
 (define-public corosync
   (package
     (name "corosync")