---
title: "Counters"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Counters}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = interactive()
)
```
`whereami` stores in counters when a `whereami` call was invoked in a script during a session. This information can be used in control reactivity in shiny app development and testing.
Below shows the basics of accessing and controlling counters.
```{r setup}
library(whereami)
```
```{r}
txt_1 <- "
whereami::cat_where(whereami::whereami(tag = 'tag1'))
"
txt_2 <- "whereami::cat_where(whereami::whereami(tag = 'tag2'))"
tf_1 <- tempfile(fileext = '.R')
tf_2 <- tempfile(fileext = '.R')
cat(txt_1,file = tf_1)
cat(txt_2,file = tf_2)
```
 
```{r}
source(tf_1)
source(tf_2)
```
## Query Counter State
 
```{r}
# All counters
counter_state()
# A single counter
counter_state(tag = 'tag1')
```
 
## Accessing Counters 
 
```{r}
# Counter names
counter_names()
# Counter tags
counter_tags()
```
 
## Retrieve Counters 
 
```{r}
counters <- counter_get()
counters
```
## Manipulating Counters
Using `counter_reset` and `counter_state` in a loop
 
```{r}
for( i in 1:10 ){
  source(tf_1)
  source(tf_2)
  if( counter_state(tag = 'tag1') > 5 )
    counter_reset(tag = 'tag2')
}
```
 
## Plot Method
 
```{r,fig.width=7}
plot(counter_get())
```
 
 
## json logs
A json log of the counter is written to `file.path(tempdir(),'whereami.json')` by default. The path can be set using `set_whereami_log()`.
```{r}
jsonlite::read_json(
file.path(tempdir(),'whereami.json'),
simplifyVector = TRUE)
```
 
## Clear all counters
 
```{r}
counter_reset()
```
Verify that there are no active counters.
 
```{r}
counter_state()
```