Database Unreachable

Product:
Planning Analytics Workspace Version 88
PAA Agent version 2.0.88.1607  ( version found in file D:\Program Files\ibm\cognos\tm1_64\paa_agent\wlp\usr\servers\kate-agent\version.txt)

Issue:

Planning Analytics Workspace Administration page can not display information about the TM1 instances.

You need to check the PA Administration Agent log files to get more information.

The message.log files are found in folder D:\Program Files\ibm\cognos\tm1_64\paa_agent\wlp\usr\servers\kate-agent\logs on the TM1 server.

You have some TM1 instance that there name is shown in garbage character – you are probably using a character only used in your language, and not in English.

Even that you stop your TM1 instance with the none-english name, the PAW administration page does not give you access to the other TM1 instances.

Error message in log file:

[10/6/23 9:30:58:542 CEST] 00000069 SystemErr R ERROR:status.py:Exception while getting windows registry details:
Traceback (most recent call last):
File “kateagent/scripts\status.py”, line 904, in get_win_registry_detail_batch
p = subprocess.Popen([“powershell.exe”, service_cmd],
File “D:\Program Files\ibm\cognos\tm1_64\paa_agent\wlp\usr\servers\kate-agent\apps\expanded\PA_KATE_AGENT.war\WEB-INF\lib\jython-standalone-2.7.2.jar\Lib\subprocess.py”, line 892, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File “D:\Program Files\ibm\cognos\tm1_64\paa_agent\wlp\usr\servers\kate-agent\apps\expanded\PA_KATE_AGENT.war\WEB-INF\lib\jython-standalone-2.7.2.jar\Lib\subprocess.py”, line 1361, in _execute_child
args = [fileSystemDecode(arg) for arg in args]
UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 437-438: invalid data
[10/6/23 9:30:58:542 CEST] 00000069 com.ibm.pa.kate.agent.scheduler.ScheduledTask E Error occurred while updating the server info json file
Traceback (most recent call last):
File “kateagent/scripts\status.py”, line 1025, in <module>
configPaths = get_win_registry_detail_batch(allServers)
File “kateagent/scripts\status.py”, line 922, in get_win_registry_detail_batch
return mapped
UnboundLocalError: local variable ‘mapped’ referenced before assignment

 

Suggested Solution:

The PAA agent will run a python script status.py to check for what Tm1 instance exist and other information, on line 922 it will read the windows registry to find the started TM1 instances – in key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services – check at that location in REGEDIT.EXE program. If there is any non-english character, like in service name or “DisplayName”=”IBM Cognos TM1 Server … then this can be the issue.

The error say it found a character that it can not understand with UTF-8, and therefor have problem scanning for more information.

Inside Cognos Configuration for Planning Analytics, remove the application with the strange name, and register it again with a name that only use English characters.

It can be that you have created the TM1 instance from the command prompt and not from the Cognos Configuration program, then it can be registered with wrong codepage.

Like;

tm1sd.exe -install -n”TM1 Production Server” -z”C:\Program Files\Cognos\TM1\Custom\TM1Data\PData”

Check that the values in registry is readable, and then restart the kate-agent (IBM Planning Analytics Administration Agent)

More information:

https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/ 

https://www.ibm.com/docs/en/planning-analytics/2.0.0?topic=rtso-setting-up-tm1-server-run-as-windows-service 

https://www.ibm.com/support/pages/setting-tm1-server-run-service 

The python code to find the information;

def get_win_registry_detail_batch(service_names):
paths = []
for n in service_names:
paths.append("'HKLM:\SYSTEM\CurrentControlSet\Services\{}'".format(n))
service_cmd = "Get-ItemPropertyValue -Path {} -Name ConfigPath".format(", ".join(paths))
try:
p = subprocess.Popen(["powershell.exe", service_cmd],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = p.communicate()
vettedResults = [line.strip()
for line in out.replace('\r', '').split('\n')
if line != '' and re.match(r'^.:\\', line)]
mapped = zip(service_names, vettedResults)
if p is not None and p.poll() == None:
p.kill()
if err and out is None:
logger.error('Error while getting windows registry details: {}'.format(err))
except Exception as e:
logger.exception('Exception while getting windows registry details: {}'.format(e.message))
return mapped