Loading

Server side macros

To avoid redundant code in your WarpScripts, you can develop server side macros. Macros allow for code factorization.

Macro directory

In the /path/to/warp10/etc/conf.d/20-macros.conf file, the directory containing macros is configured by:

warpscript.repository.directory = ${standalone.home}/macros
warpscript.repository.refresh = 5000
  • warpscript.repository.directory: Macro Repository
  • warpscript.repository.refresh: How often (in ms) to scan macro repository for new scripts.

Macros are mc2 files deployed:

  • in a sub directory in Warp 10 Analytics Engine, for example: /path/to/warp10/macros/domain/app/macro.mc2
  • via jar files for use with WarpScript library

Server side macro

For example: /path/to/warp10/macros/domain/app/MAX_ABS.mc2

<%
// Macro's documentation
  {
    'name' 'domain/app/MAX_ABS'
    'desc' // Description
      <'
Function to calculate the max absolute value of two parameters
      '>
     // Signature
    'sig' [ [ [ [ 'param2:LONG' 'param1:LONG' ] ]  [ 'result:LONG' ] ] ]
    'params' {
      'param1' 'First parameter'
      'param2' 'Second parameter'
      'result' 'Max absolute value of two parameters'
    }
    // Examples
    'examples' [
    <'
-7 8 @domain/app/MAX_ABS
    '>
    ]
  } INFO

    // Actual code of the macro
    SAVE 'context' STORE

    ABS     	// Absolute value of first parameter
    SWAP    	// Swapping to get 2nd parameter on top
    ABS     	// Absolute value of 2nd parameter
    MAX     	// Max of those two absolute values
    $context RESTORE

%>
'macro' STORE
// Unit tests
-1 -5 $macro EVAL 5 == ASSERT
$macro

Once deployed, you can use it. For example:

-1 -5 @domain/app/MAX_ABS  // To evaluate a macro you use @name