```@meta
CurrentModule = PSBoardDataBase
```

# Index

```@contents
Pages = ["about_software.md"]
Depth = 4
```

# このリポジトリのソフトウェアについての説明

このリポジトリにあるのは、JATHub masterのログファイル、及びGoogle SheetsからエクスポートしたCSVファイルからデータベースを作成するためのコードである。
メインの関数は[`create_database`](@ref)である。

!!! info
    **TLDR**;
    データベースがほしいときは_Masterのログ_と_Slaveのログ_を用意して、[`create_database`](@ref)
    ```julia
    create_database(
        "database_name.db";
        masterlog_dir = "dir/to/master/logs",
        slavelog_dir = "dir/to/slave/logs"
    )
    ```

## 動かし方
[Julia](https://julialang.org)は[juliaup](https://github.com/JuliaLang/juliaup)でインストールする。
リポジトリのルート(`Project.toml`がある)で
```
$ julia --project
```
をするとJuliaのREPLが立ち上がる。

`]`をおして`Pkg`モードに入り、`instantiate`を実行すると、必要なパッケージを自動でインストールする。

backspaceでjulianモードに戻り(左側が`julia>`になってる)、`using PSBoardDataBase`をすると使えるようになる。

`?`を押すとhelpモードに入り、関数名などをいれるとそのドキュメント(下にあるものと同じ)が閲覧できる。

`PSBoardDataBase.create_database`を検索すると使い方がわかる。

# テストについて

テストでは実際にデータベースを作成している。
デフォルトでは全部は実行しないが、master logとslave logをおき、かつ環境変数`LOCAL_TEST`を設定することで、すべての工程を実行できる。[^1]
用意するものの詳細は下に書いてある。

Pkgモード(`]`を押す)で`test`とうつと実行できる。
環境変数の設定は`ENV["LOCAL_TEST"] = "1"`とでも書く。
自動でsqlite browserを開く設定になっている。

[^1]: master log fileはgitには入れたくないので、このような形態をとっている。

## Master logを用意する

[`start-shiftwork`](https://gitlab.cern.ch/dhashimo/PS_Board_QAQC/-/blob/master/Software_Test/ShiftWorks/script/start-shiftwork?ref_type=heads)が生成するログファイル(同じリポジトリの`../log`のところ、通常はJATHub Masterにある)を`test/input/`以下に置く。
以下のようにする。

```sh
$ tree -L 2 test/input/
test/input/
└── log
    ├── 100.log
    ├── 101_long.log
    ├── 102_long.log
    ├── 103.log
    ├── 104_long.log
    ├── 105.log
    ├── 106_long.log
    ├── 107.log
    ├── 108_long.log
    ├── 109_long.log
    ├── 110.log
...
```

## Slave logを用意する

同様にJATHub slaveで作られるログも用意する。
これはskewを抽出するのに使われる。
最悪なくてもいいのでそのときは空のディレクトリを関数に渡す。

```sh
 tree -L 2 test/input/slavelogs/ | head -n 10
test/input/slavelogs/
└── main
    ├── 101_28_longrun.txt
    ├── 101_29.txt
    ├── 101_29_clk.txt
    ├── 103_28_longrun.txt
    ├── 103_29.txt
    ├── 103_29_clk.txt
    ├── 103_89.txt
    ├── 103_89_clk.txt
```

## Coverage Reportの出し方

```julia
using LocalCoverage
html_coverage(generate_coverage(), open = true)
```
Full testのほうが当然だがcoverageが高くなる。

# 新しいQAQCキャンペーン時に更新すべき内容

- [`PSBoardDataBase.insert_qaqc_campaign_id`](@ref): キャンペーンの日時
- [`PSBoardDataBase.get_campaign_id_from_run_id`](@ref): runidとの関係

# API

```@index
```

```@autodocs
Modules = [PSBoardDataBase]
```

## `QaqcMasterLog`

```@autodocs
Modules = [QaqcMasterLog]
```

## `DownloadCSVs`

```@autodocs
Modules = [DownloadCSVs]
```

## `ClockParser`

```@autodocs
Modules = [ClockParser]
```

## `SlaveLogParser`

部分的な実装。
そして活用も部分的。

```@autodocs
Modules = [SlaveLogParser]
```

## `DispatchChecker`

```@autodocs
Modules = [DispatchChecker]
```
