Saiku多用户使用时数据同步刷新

这里我们需要了解一下关于saiku的刷新主要有两种数据需要刷新:

>1 刷新数据库的表中的数据,得到最新的表数据进行展示。

>2 刷新cube信息,得到最新的cube配置信息,避免 error loading page错误。

 

如果我们只使用admin用户登录saiku的话,是不存在任何问题的,直接点击saiku中刷新按钮即可达到刷新效果啦!

 

但是 如果我们配置了多用户使用saiku,且其它用户不是ROLE_ADMIN角色的话,是没有刷新按钮的,这时候就要靠我们的脚本刷新了。(而且总是去登录saiku点击按钮执行saiku也比较麻烦,所以还是比较推荐用脚本控制刷新哦)

首先我们得知道saiku刷新时会调用一个刷新接口,所以我们只要做到在脚本中请求对应用户的刷新接口即可。

 

刷新脚本内容如下:

saiku_refresh.sh

#!/bin/bash

dir=`pwd`
filename=/cookie.txt
filePath=${dir}${filename}
echo $filePath

if [ -f $filePath ] ; then
echo 'cookie.txt exists'
rm -rf $filePath
echo 'The old cookie.txt is  removed.'
fi
echo 'Begin to get new Cookie... '

curl -c ./cookie.txt -d "language=zh&password=admin&username=111" http://10.22.33.44:8080/saiku/rest/saiku/session
curl -b ./cookie.txt "http://10.22.33.44:8080/saiku/rest/saiku/admin/discover/refresh" 1>saiku_refresh_data.txt
echo 'admin refresh OK!!!' 1>>saiku_refresh_data.txt
echo 'admin refresh end!!!'
if [ -f $filePath ] ; then
echo 'cookie.txt exists'
rm -rf $filePath
echo 'The old cookie.txt is  removed.'
fi

curl -c ./cookie.txt -d "language=zh&password=111&username=test1" http://10.22.33.44:8080/saiku/rest/saiku/session
curl -b ./cookie.txt "http://10.22.33.44:8080/saiku/rest/saiku/test1/discover/refresh" 1>>saiku_refresh_data.txt 
echo 'test1 refresh OK!!!' 1>>saiku_refresh_data.txt
echo 'test1 refresh end!!!'

if [ -f $filePath ] ; then
echo 'cookie.txt exists'
rm -rf $filePath
echo 'The old cookie.txt is  removed.'
fi

curl -c ./cookie.txt -d "language=zh&password=111&username=test2" http://10.22.33.44:8080/saiku/rest/saiku/session
curl -b ./cookie.txt "http://10.22.33.44:8080/saiku/rest/saiku/test2/discover/refresh" 1>>saiku_refresh_data.txt
echo 'test2 refresh OK!!!' 1>>saiku_refresh_data.txt
echo 'test2 refresh end!!!'

echo 'All refresh end!!!'

 

参数解析:

  password  参数指定需要被刷新的用户的密码

  username  参数指定需要被刷新的用户的用户名

  http://10.22.33.44:8080  指定saiku的访问地址

  /saiku/rest/saiku/username/discover/refresh :这便是被调用的刷新接口 ,username是根据用户变动的。

    eg:  需要刷新admin用户的数据信息,这里便需要改为 /saiku/rest/saiku/admin/discover/refresh

      需要刷新test1用户的数据信息,这里便需要改为 /saiku/rest/saiku/test1/discover/refresh

  

脚本解析:

1.得到当前脚本所在的目录,指定用来保存cookie信息的文件为cookie.txt

dir=`pwd`
filename=/cookie.txt
filePath=${dir}${filename}
echo $filePath

  

2.判断当前脚本同级目录是否已存在cookie.txt文件,如果已存在就删除,如果未存在就输出提示开始获取用户新的cookie信息。

if [ -f $filePath ] ; then
echo 'cookie.txt exists'
rm -rf $filePath
echo 'The old cookie.txt is  removed.'
fi
echo 'Begin to get new Cookie... '

  

3. 将admin用户的验证信息存到cookie.txt文件中,并调用刷新接口,将刷新接口返回的数据信息存入 saiku_refresh_data.txt文件中,随后给出提示信息,admin用户的数据信息已刷新完成。

curl -c ./cookie.txt -d "language=zh&password=admin&username=111" http://10.22.33.44:8080/saiku/rest/saiku/session
curl -b ./cookie.txt "http://10.22.33.44:8080/saiku/rest/saiku/admin/discover/refresh" 1>saiku_refresh_data.txt
echo 'admin refresh OK!!!' 1>>saiku_refresh_data.txt
echo 'admin refresh end!!!'

 

4.开始进行下一个用户的数据刷新 test1, j继续判断cookie.txt文件是否存在,如果已存在就删除。

if [ -f $filePath ] ; then
echo 'cookie.txt exists'
rm -rf $filePath
echo 'The old cookie.txt is  removed.'
fi

  

5.将test1用户的验证信息存到cookie.txt文件中,并调用刷新接口,将刷新接口返回的数据信息存入 saiku_refresh_data.txt文件中,随后给出提示信息,test1用户的数据信息已刷新完成。

curl -c ./cookie.txt -d "language=zh&password=111&username=test1" http://10.22.33.44:8080/saiku/rest/saiku/session
curl -b ./cookie.txt "http://10.22.33.44:8080/saiku/rest/saiku/test1/discover/refresh" 1>>saiku_refresh_data.txt 
echo 'test1 refresh OK!!!' 1>>saiku_refresh_data.txt
echo 'test1 refresh end!!!'

  

6. test2用户刷新与test1用户刷新雷同,后面如果又给saiku添加其他用户也继续往后添加即可。(脚本参考test1 用户刷新)

 

切记需要对每个用户的数据都进行刷新哦,每个用户都要各调一遍刷新接口!!!  只刷新admin是不行的,其他用户获取不到最新的cube信息就会抛出异常!!! (error loading page)

 posted on 2019-03-20 13:09  阿叮339  阅读(396)  评论(0编辑  收藏  举报