Using Zimagi Modules

Once you understand the basics of Zimagi’s structure and components, it is easy to use a module developed by other users/developers. The module we will clone and install here is the one documented in module-noaa-stations (which is discussed in Creating a module). This module acquires and queries weather station data provided by the National Oceanic and Atmospheric Administration.

Installing Zimagi

Cloning the Zimagi Repo

To begin, we install the main Zimagi system. We do this by cloning the Zimagi repo

Using the command line, navigate to a directory you wish to use, and then run git clone https://github.com/zimagi/zimagi.git.

Configuring the environment

Change directory into the zimagi folder and then use Vagrant to configure the development environment. Use vagrant up to initialize the Vagrant instance and then use vagrant ssh to set up the environment and ready Docker for use.

vagrant up

This will start the provisioning process. After provisioning has been completed, all the necessary components will be installed, including the core OS packages, core dependencies, development tools, Redis CLI, and Docker. Finally, the application is built. We can then use vagrant ssh to connect to the system.

vagrant ssh

Now that we’ve finished installing the dependencies and tools, we can finish configuring the development environment for use. The first thing we want to do is make sure all modules are updated and environment defaults set. To do this, we’ll use zimagi env get.

zimagi env get

We can use the docker-compose up command to build the Docker container, which will install everything using the Docker image. We’ll use -d to daemonize the install process and let in run in the background.

docker-compose up -d

You can check the status of the environment to see which containers are currently installed and running. We want to be sure all Zimagi systems components are running, including the entrypoints for PostGres and Redis, zimagi-command, zimagi-scheduler, and zimagi-worker. The Docker instance should contain the Zimagi core, which we can confirm by using zimagi env get again.

After the setup process is complete, we need to set some environment variables to ready Zimagi for use. First, we want to set the host for the Zimagi environment.

We use the host save command to define a host. Here we’ll set the host to the localhost. zimagi host save host=localhost

Using zimagi env get will display that a host is now assigned to the environment. By default, the active user of a Zimagi environment is “admin”. You can see all current users and their status (active or non-active) by using the zimagi user list command.

zimagi user list

You may wish to update the admin account’s attributes by using the user save command and updating the user’s name, email, and password. To do this, use the user save command along with the appropriate field: zimagi user save admin first_name=”First”

`zimagi user save admin last_name=”Last"

zimagi user save admin email=”[testemail@address.com]"

Installing Modules

Now that we have finished setting up the Zimagi environment we can install a module into the system.

We have to do several things when installing a module:

  • Add the module to the Docker instance

  • Restart the Docker instance

  • Set module environment settings

  • Get most current data

  • Install any module requirements

To begin with, we’ll add the module to the Docker instance. We do this by using the module add command, followed by the URL of the module that we want to add to the environment.

zimagi module add https://github.com/zimagi/module-noaa-stations.git

After adding the module to the Zimagi system, we need to reset the Docker instance.

docker-compose restart

Now we can check to see that the module install was successful by using the zimagi module list command. This will show a list of all modules.

zimagi module list

We want to make sure all modules share the same environment settings, and we can do this by using the zimagi module sync command.

zimagi module sync

We’ll use the zimagi env get command again to make sure that all modules contain the most current data from their sources and install any module requirements.

After installing and syncing the module, we can begin interacting with the module.

We can learn which commands are available to us by using the help command, allowing us to see which commands can be used for the installed module.

zimagi --help

We’ll begin by importing some data to query. We’ll use the import command to import some data, which in this instance is the data defined by the test specification.

zimagi import test

Making Queries

Data points in this module are referred to as “observations”, as defined in the specifications. Calling help on the module lets us see that observation is a command we can use that lets us view and manage station observations. We can use observation list to see all observations in the imported data.

zimagi observation list

If we want to see just some of the fields associated with the observations, we can pass in those fields as arguments. We can see which fields are available to us by typing --help after observation list.

zimagi observation list --help

We can also filter them with any filtering criteria we want. Let’s say we want to focus on the temp_attrs field and limit it to just the first 24 entries. We can do this by appending the temp_attrs field followed by .lt=24.

zimagi observation list temp_attrs.lt=24

Now let’s say that we want to limit the returned fields to only date and temp. We can accomplish this by adding the --fields argument , followed by the fields we want to visualize.

zimagi observation list temp_attrs.lt=24 --fields=date,temp

We can also use search for data points that match specific values. Let’s say we want to get the records where the temperature is equal to 50.5. All we have to do is append temp=50.5 to the query.

zimagi observation list temp_attrs.lt=24 temp=50.5