\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Julian} \pdfinfo{ /Title (miimetiq-distribution-system.pdf) /Creator (Cheatography) /Author (Julian) /Subject (MIIMETIQ Distribution System Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{6EAEDB} \definecolor{LightBackground}{HTML}{ECF4FA} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{MIIMETIQ Distribution System Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Julian} via \textcolor{DarkBackground}{\uline{cheatography.com/36187/cs/11374/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Julian \\ \uline{cheatography.com/julian} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 12th December, 2017.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{AMQP}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{0.9954 cm} x{3.9816 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{AMQP - Readers}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Asset publishes on AMQP broker} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} AuthN User & `\textless{}model\_name\textgreater{}/\textless{}asset\_name\textgreater{} - pass: sha1( \textless{}asset\_name\textgreater{} + SEED)` \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} Seed & Seed is defined in {\bf{miimetiq.conf}} using variable: \seqsplit{`DEVICE\_AUTH\_HASH\_SEED​`}, default SEED value is `miimetiq` \tn % Row Count 7 (+ 4) % Row 3 \SetRowColor{white} AuthZ & device 'A' can only publish on its readers, if device 'A' has to publish on readers associated with device 'B'; it has to be declared in {\bf{miimetiq.conf​}} using variable \seqsplit{`MIIMETIQ\_RELAY\_TO\_RELATED\_ASSET`} ​and they have to be related using \seqsplit{`miimetiq.types.related\_asset`} \tn % Row Count 16 (+ 9) % Row 4 \SetRowColor{LightBackground} & Required to restrict with the variable in \seqsplit{`AMQP\_AUTHZ\_RESTRICTED\_MODELS`} in {\bf{miimetiq.conf}} ​the listed devices if they should only publish and subscribe data of itself or it related assets \tn % Row Count 23 (+ 7) % Row 5 \SetRowColor{white} & Instrument type required to be connected to AMQP CL exchange is: \seqsplit{`miimetiq.types.instrument.connection\_layer`} \tn % Row Count 27 (+ 4) % Row 6 \SetRowColor{LightBackground} \seqsplit{Exchange} & `cl.\textless{}model-name\textgreater{}.\textless{}asset name\textgreater{}` \tn % Row Count 28 (+ 1) % Row 7 \SetRowColor{white} Topic & `miimetiq.ds.reader.\textless{}type\textgreater{}.\textless{}model\_name\textgreater{}.\textless{}device\_id\textgreater{}.\textless{}reader\_path\textgreater{}` \tn % Row Count 31 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{AMQP - Reader - Example}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\seqsplit{DEVICE\_AUTH\_HASH\_SEED​} = 'miimetiq' \newline authn:​ u: generator/54282d2405ec - p: sha1( 54282d2405ec + miimetiq) \newline exchange:​ \seqsplit{cl.generator.54282d2405ec} \newline topic​: \seqsplit{miimetiq.ds.reader.integer.generator.54282d2405ec.engine.running\_hours} \newline payload​: \newline \{ \newline 'task': 'async', \newline 'id': \seqsplit{'627727b5-1bd1-4fdf-9348-d453dfa17841'}, \newline 'args': {[}'generator.54282d2405ec.engine.running\_hours 1412525558.01 128'{]}, \newline 'kwargs': \{\} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{MQTT}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.74655 cm} x{4.23045 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{MQTT - Readers}} \tn % Row 0 \SetRowColor{LightBackground} AuthN & Same as amqp authn \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Topic & `miimetiq/ds/reader/\textless{}type\textgreater{}/\textless{}asset\_model\textgreater{}/\textless{}asset\_name\textgreater{}/\textless{}reader\_path\textgreater{}` \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{PayLoad} & `\textless{}asset\_model\textgreater{}.\textless{}asset\_name\textgreater{}.\textless{}reader\_path\textgreater{} \textless{}ts\textgreater{} \textless{}value\textgreater{}` \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{0.84609 cm} x{4.13091 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{MQTT - Readers - Example}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{AuthN:} & Same as amqp authn \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \seqsplit{Topic:} & \seqsplit{`miimetiq/ds/reader/integer/generator/my\_generator-1/engine/running\_hours`} \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} \seqsplit{Payload:} & \seqsplit{`DG2014-1P.device-30-Shanghai.engine.oil\_temp} 1412525558.01 128` \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.74655 cm} x{4.23045 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{MQTT - Writers - Example}} \tn % Row 0 \SetRowColor{LightBackground} AuthN & Same as amqp authn \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Topic & \seqsplit{`miimetiq/ds/writer/boolean/DG2014-1P/device-30-Shanghai/generator/power`} \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} \seqsplit{Payload} & `\{ "value": true, "correlation\_id": "ef1ha567e" \}` \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.74655 cm} x{4.23045 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{MQTT - Writers}} \tn % Row 0 \SetRowColor{LightBackground} AuthN & Same as amqp authn \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Topic & `miimetiq/ds/writer/\textless{}type\textgreater{}/\textless{}asset\_model\textgreater{}/\textless{}asset\_name\textgreater{}/\textless{}writer\_path\textgreater{}` \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{Payload} & `\{ "value": \textless{}value\textgreater{}, "correlation\_id": \textless{}uuid.without.dashes\textgreater{} \}` \tn % Row Count 6 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.74655 cm} x{4.23045 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{MQTT - Writers - Feedback}} \tn % Row 0 \SetRowColor{LightBackground} AuthN & Same as amqp authn \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Topic & `miimetiq/ds/writer\_results/\textless{}asset\_model\textgreater{}/\textless{}asset\_name\textgreater{}/\textless{}correlation\_id\textgreater{}` \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} \seqsplit{Payload} & `\{ "status": "OK", "any": "something" \}` \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.74655 cm} x{4.23045 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{MQTT - Writer Feedback - Example}} \tn % Row 0 \SetRowColor{LightBackground} AuthN & Same as amqp authn \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Topic & \seqsplit{`miimetiq/ds/devices/generator/my\_generator-1/engine/power`} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{Payload} & `\{ "status": "Failed", "any": "anything" \}` \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{AMQP - Writer}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Asset subscribes to AMQP broker} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Exchange & `cl.\textless{}model-name\textgreater{}.\textless{}asset name\textgreater{}` \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} Topic to be subscribed or where to publish: & `miimetiq.ds.writer.\textless{}type\textgreater{}.\textless{}model\_name\textgreater{}.\textless{}asset\_id\textgreater{}.\textless{}writer\_path\textgreater{}` \tn % Row Count 7 (+ 4) % Row 3 \SetRowColor{white} Payload & `\{ 'task': 'async', 'id': \textless{}uuid\textgreater{}, 'args': {[}\{"value": \textless{}value\textgreater{}\}{]}, 'kwargs': \{\} \}` \tn % Row Count 11 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{AMQP - Writer - Example}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Authn: u: -{}-{}- / p: -{}-{}- \newline Exchange: \newline Topic: \seqsplit{miimetiq.ds.writer.boolean.6-diesel\_generator\_schema.5609022ee7e466125aa1c032.generator.power} \newline Payload: \newline \{ \newline 'task': 'async', \newline 'id': \textless{}uuid\textgreater{}, \newline 'args': {[}\{"value": \textless{}value\textgreater{}\}{]}, \newline 'kwargs': \{\} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.44333 cm} x{3.53367 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Writers Rest Push}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{User submit a writer value in REST API} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} URL: & \seqsplit{http://api.miimetiq.local/assets/6-diesel\_generator\_schema/5609022ee7e466125aa1c032/generator/power/send} \tn % Row Count 5 (+ 4) % Row 2 \SetRowColor{LightBackground} Required headers & `Content-Type: application/json Access-Token: \textless{}session token\textgreater{}` \tn % Row Count 8 (+ 3) % Row 3 \SetRowColor{white} Payload & ´\{"value": \textless{}value\textgreater{}\}´ \tn % Row Count 9 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{AMQP - Examples}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Send writer}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{curl -X POST -H "Access-Token: \$TOKEN" -H "Content-Type: application/json" -d '\{"value": true\}' \newline http://api.dg.miimetiq.m2mcloudfactory.com/assets/DG2014-1P/55fa029670b5516cc5ca701f/generator/power} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Payload reporting an OK:}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\{ \newline "status": "SUCCESS", \newline "result": \{ \newline "status": "OK", \newline "any\_field": "any\_value", \# not required, customer \newline \}, \newline "task\_id": \textless{}uuid\textgreater{} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{0.84609 cm} x{4.13091 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Writers feedback}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Asset publish a message to AMQP broker} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \seqsplit{Exchange} & celeryresults \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} Topic & \seqsplit{`correlation\_id​.replace('-'},'')` \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Payload reporting a fail}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\{ \newline "status": "SUCCESS", \newline "result": \{ \newline "status": "KO", \newline "any\_field": "any\_value", \# not required, customer \newline \}, \newline "task\_id": \textless{}uuid\textgreater{} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Request a token}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{TOKEN=\$(curl -X POST -d '\{"username": "admin", "password": "admin"\}' -H 'Content-Type: \newline application/json' \seqsplit{http://api.dg.miimetiq.m2mcloudfactory.com/authn/login} | jq .token)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}