Install on seperate machine

Hi,
Do I install these tools on a seperate machine? Or on the 3CX box itself?
I was confused about the "Forward your 3CX ports to your dev machine" text in the last step. And I don't want to break my 3CX ;-)

It's intended to run on the same machine as 3CX. Currently only Debian/Raspberry Pi instances are supported.
However, I'm still working on it. Certain features like custom dial codes are not yet ready.
But I am happy about additional support.

And I don't want to break my 3CX ;-)

I don't want to break it, too. A short introduction on how the tools integrate:

Postgres Access (Internal 3CX DB): I don't want to mess with the DB, so only reading will happen, no writes.
REST API (Management console): The management console frontend uses an internal REST API. I reverse engineered some endpoints. Using these endpoints is absolutely safe as it's the same as doing stuff on the management console frontend.
File watchers: Most of the magic is happening by watching 3CX file directories. E.g. when the phonebook changes, the watcher detects a write to the xml for the device phonebooks and "adds" the missing numbers (like home or business).

Dev help appreciated
If you wan't to develop own features, add stuff, fix something just do it. I'm open for pull requests.
The structure is self explaining. The root is a nodejs (typescript) service (just look at the files). Additionally there are (for now) two sub-projects with frontend plugins (one for the webclient and for the management console) written in JS/React.

It's intended to run on the same machine as 3CX. Currently only Debian/Raspberry Pi instances are supported. However, I'm still working on it. Certain features like custom dial codes are not yet ready. But I am happy about additional support.

I have got it working. Works great. Running on the same RPi as 3CX.
I did notice some of the numbers got swapped on my Yealink W60B.
In 3CX a specific contact with 3 numbers looks like this:

On my Yealink it looks like this (hope you understand dutch, if not, let me translate, Kantoor means Office, Andere means Other):

Is there a way to swap some numbers around during the conversion, so they end up at the right place?

The yealink generator iterates over a predefined structure:
https://github.com/adroste/3cx-tools/blob/ec1c4c76b799d6e75f1418f62bacf2c969826aa4/src/func/phonebook-yealink.ts#L20
https://github.com/adroste/3cx-tools/blob/ec1c4c76b799d6e75f1418f62bacf2c969826aa4/src/func/phonebook.ts#L57-L70
So the display order is 'mobile', 'private', 'business' and then the secondary numbers 'mobile2', 'private2', 'business2'.
I'll make it adjustable. It's a simple change.

The yealink generator iterates over a predefined structure:
https://github.com/adroste/3cx-tools/blob/ec1c4c76b799d6e75f1418f62bacf2c969826aa4/src/func/phonebook-yealink.ts#L20
https://github.com/adroste/3cx-tools/blob/ec1c4c76b799d6e75f1418f62bacf2c969826aa4/src/func/phonebook.ts#L57-L70
So the display order is 'mobile', 'private', 'business' and then the secondary numbers 'mobile2', 'private2', 'business2'.
I'll make it adjustable. It's a simple change.

Done. It's now possible to customize the order.
Please add a file called config.local.json into the root folder (the same folder where the config.default.json is in).
Then set its content to:
{
  "phoneNumberOrder": [
    "mobile",
    "mobile2",
    "private",
    "private2",
    "business",
    "business2",
    "extra"
  ]
}

Afterwards, restart the service (should be: sudo systemctl restart 3cx-tools-service). The phonebooks should regenerate now with the new config.

Done. It's now possible to customize the order.
Please add a file called config.local.json into the root folder (the same folder where the config.default.json is in).
Then set its content to:
{
  "phoneNumberOrder": [
    "mobile",
    "mobile2",
    "private",
    "private2",
    "business",
    "business2",
    "extra"
  ]
}

Afterwards, restart the service (should be: sudo systemctl restart 3cx-tools-service). The phonebooks should regenerate now with the new config.

Erh. Not quite. Only the mobile number is visible now. All the others has disappeared. And the mobile number is displayed as business. This is the case for all contacts.
I am not sure how the phone number fields are called in the database, but that's probably something you know ;-)
In the RAW XML there is also 1 number visible, mobile.
<DirectoryEntry>
    <Name>Monique Paulussen</Name>
    <Telephone>0610017887</Telephone>
</DirectoryEntry>

The yealink_phonebook.xml (in fact, all phonebooks are) is updated, as I see the date/time stamp change after I change a contact.
I pulled the latest GIT and restarted the service and also the whole Pi. Is there anything else I should do?
I did notice an error when quetying the status of the service.
Jan 01 19:12:37 3cx npm[21596]: [01.01.2022 19:12.37.161] [LOG]   [Dial Code API] listening for calls...
Jan 01 19:12:37 3cx npm[21596]: node:internal/process/promises:246
Jan 01 19:12:37 3cx npm[21596]:           triggerUncaughtException(err, true /* fromPromise */);
Jan 01 19:12:37 3cx npm[21596]:           ^
Jan 01 19:12:37 3cx npm[21596]: [Error: EACCES: permission denied, open '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'] {
Jan 01 19:12:37 3cx npm[21596]:   errno: -13,
Jan 01 19:12:37 3cx npm[21596]:   code: 'EACCES',
Jan 01 19:12:37 3cx npm[21596]:   syscall: 'open',
Jan 01 19:12:37 3cx npm[21596]:   path: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'

The service seems to restart over and over again. I didn't notice this earlier before this pull.
Is there log somewhere I can look at?

Erh. Not quite. Only the mobile number is visible now. All the others has disappeared. And the mobile number is displayed as business. This is the case for all contacts.
I am not sure how the phone number fields are called in the database, but that's probably something you know ;-)
In the RAW XML there is also 1 number visible, mobile.
<DirectoryEntry>
    <Name>Monique Paulussen</Name>
    <Telephone>0610017887</Telephone>
</DirectoryEntry>

The yealink_phonebook.xml (in fact, all phonebooks are) is updated, as I see the date/time stamp change after I change a contact.
I pulled the latest GIT and restarted the service and also the whole Pi. Is there anything else I should do?
I did notice an error when quetying the status of the service.
Jan 01 19:12:37 3cx npm[21596]: [01.01.2022 19:12.37.161] [LOG]   [Dial Code API] listening for calls...
Jan 01 19:12:37 3cx npm[21596]: node:internal/process/promises:246
Jan 01 19:12:37 3cx npm[21596]:           triggerUncaughtException(err, true /* fromPromise */);
Jan 01 19:12:37 3cx npm[21596]:           ^
Jan 01 19:12:37 3cx npm[21596]: [Error: EACCES: permission denied, open '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'] {
Jan 01 19:12:37 3cx npm[21596]:   errno: -13,
Jan 01 19:12:37 3cx npm[21596]:   code: 'EACCES',
Jan 01 19:12:37 3cx npm[21596]:   syscall: 'open',
Jan 01 19:12:37 3cx npm[21596]:   path: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'

The service seems to restart over and over again. I didn't notice this earlier before this pull.
Is there log somewhere I can look at?

Already found it, was in syslog.
Jan  1 19:20:24 3cx systemd[1]: Started 3cx-tools-server - custom plugins, tools for 3CX.
Jan  1 19:20:25 3cx npm[26619]: ><EMAIL_ADDRESS>start
Jan  1 19:20:25 3cx npm[26619]: > NODE_ENV=production node build/src/main.js "run-as-service"
Jan  1 19:20:26 3cx npm[26619]:    _____ _______  __    ______            __
Jan  1 19:20:26 3cx npm[26619]:   |__  // ____/ |/ /   /_  __/___  ____  / /____
Jan  1 19:20:26 3cx npm[26619]:    /_ </ /    |   /     / / / __ \/ __ \/ / ___/
Jan  1 19:20:26 3cx npm[26619]:  ___/ / /___ /   |     / / / /_/ / /_/ / (__  )
Jan  1 19:20:26 3cx npm[26619]: /____/\____//_/|_|    /_/  \____/\____/_/____/
Jan  1 19:20:26 3cx npm[26619]: Service '3cx-tools-server' is: NOT ACTIVE
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.013] [LOG]   [Config loader] config loaded {
Jan  1 19:20:27 3cx npm[26619]:   ivrPromptsDir: '/var/lib/3cxpbx/Instance1/Data/Ivr/Prompts',
Jan  1 19:20:27 3cx npm[26619]:   pbxConfigJsonFile: '/var/lib/3cxpbx/Bin/config.json',
Jan  1 19:20:27 3cx npm[26619]:   provisioningDir: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning',
Jan  1 19:20:27 3cx npm[26619]:   webclientDir: '/var/lib/3cxpbx/Data/Http/wwwroot/webclient',
Jan  1 19:20:27 3cx npm[26619]:   mcSettingsPanelBuildDir: '/home/pi/3cx-tools/mc-settings-panel/build/',
Jan  1 19:20:27 3cx npm[26619]:   nginxProxySnippetInstallFile: '/var/lib/3cxpbx/Bin/nginx/conf/snippets/14-3cx-tools-proxy.conf',
Jan  1 19:20:27 3cx npm[26619]:   serviceInstallFile: '/lib/systemd/system/3cx-tools-server.service',
Jan  1 19:20:27 3cx npm[26619]:   webclientCallOverviewPanelBuildDir: '/home/pi/3cx-tools/webclient-realtime-call-overview-panel/build/',
Jan  1 19:20:27 3cx npm[26619]:   activeCallsCheckIntervalMs: 500,
Jan  1 19:20:27 3cx npm[26619]:   dialCodes: {},
Jan  1 19:20:27 3cx npm[26619]:   httpPort: 4848,
Jan  1 19:20:27 3cx npm[26619]:   phoneNumberOrder: [
Jan  1 19:20:27 3cx npm[26619]:     'mobile',
Jan  1 19:20:27 3cx npm[26619]:     'mobile2',
Jan  1 19:20:27 3cx npm[26619]:     'private',
Jan  1 19:20:27 3cx npm[26619]:     'private2',
Jan  1 19:20:27 3cx npm[26619]:     'business',
Jan  1 19:20:27 3cx npm[26619]:     'business2',
Jan  1 19:20:27 3cx npm[26619]:     'extra'
Jan  1 19:20:27 3cx npm[26619]:   ]
Jan  1 19:20:27 3cx npm[26619]: }
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.024] [LOG]   running as service
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.029] [LOG]   [Nginx Proxy Snippet Installer] nginx proxy snippet already installed, skipping install
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.302] [LOG]   [3CX REST API] connected
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.366] [LOG]   [Phonebook Monitor] watching phonebook files...
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.368] [LOG]   [Caller ID] started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.374] [LOG]   [Phonebook Yealink] patcher started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.377] [LOG]   [Phonebook Fanvil] patcher started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.381] [LOG]   [Phonebook Snom] patcher started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.386] [LOG]   [Active Calls Monitor] started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.388] [LOG]   [Call Log Monitor] started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.404] [LOG]   [Web Server] HTTP server listening on port 4848
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.410] [LOG]   [Websocket API] WS api listening...
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.412] [LOG]   [Dial Code API] listening for calls...
Jan  1 19:20:27 3cx npm[26619]: node:internal/process/promises:246
Jan  1 19:20:27 3cx npm[26619]:           triggerUncaughtException(err, true /* fromPromise */);
Jan  1 19:20:27 3cx npm[26619]:           ^
Jan  1 19:20:27 3cx npm[26619]: [Error: EACCES: permission denied, open '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'] {
Jan  1 19:20:27 3cx npm[26619]:   errno: -13,
Jan  1 19:20:27 3cx npm[26619]:   code: 'EACCES',
Jan  1 19:20:27 3cx npm[26619]:   syscall: 'open',
Jan  1 19:20:27 3cx npm[26619]:   path: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'
Jan  1 19:20:27 3cx npm[26619]: }
Jan  1 19:20:27 3cx systemd[1]: 3cx-tools-server.service: Main process exited, code=exited, status=1/FAILURE
Jan  1 19:20:27 3cx systemd[1]: 3cx-tools-server.service: Failed with result 'exit-code'.

Already found it, was in syslog.
Jan  1 19:20:24 3cx systemd[1]: Started 3cx-tools-server - custom plugins, tools for 3CX.
Jan  1 19:20:25 3cx npm[26619]: ><EMAIL_ADDRESS>start
Jan  1 19:20:25 3cx npm[26619]: > NODE_ENV=production node build/src/main.js "run-as-service"
Jan  1 19:20:26 3cx npm[26619]:    _____ _______  __    ______            __
Jan  1 19:20:26 3cx npm[26619]:   |__  // ____/ |/ /   /_  __/___  ____  / /____
Jan  1 19:20:26 3cx npm[26619]:    /_ </ /    |   /     / / / __ \/ __ \/ / ___/
Jan  1 19:20:26 3cx npm[26619]:  ___/ / /___ /   |     / / / /_/ / /_/ / (__  )
Jan  1 19:20:26 3cx npm[26619]: /____/\____//_/|_|    /_/  \____/\____/_/____/
Jan  1 19:20:26 3cx npm[26619]: Service '3cx-tools-server' is: NOT ACTIVE
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.013] [LOG]   [Config loader] config loaded {
Jan  1 19:20:27 3cx npm[26619]:   ivrPromptsDir: '/var/lib/3cxpbx/Instance1/Data/Ivr/Prompts',
Jan  1 19:20:27 3cx npm[26619]:   pbxConfigJsonFile: '/var/lib/3cxpbx/Bin/config.json',
Jan  1 19:20:27 3cx npm[26619]:   provisioningDir: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning',
Jan  1 19:20:27 3cx npm[26619]:   webclientDir: '/var/lib/3cxpbx/Data/Http/wwwroot/webclient',
Jan  1 19:20:27 3cx npm[26619]:   mcSettingsPanelBuildDir: '/home/pi/3cx-tools/mc-settings-panel/build/',
Jan  1 19:20:27 3cx npm[26619]:   nginxProxySnippetInstallFile: '/var/lib/3cxpbx/Bin/nginx/conf/snippets/14-3cx-tools-proxy.conf',
Jan  1 19:20:27 3cx npm[26619]:   serviceInstallFile: '/lib/systemd/system/3cx-tools-server.service',
Jan  1 19:20:27 3cx npm[26619]:   webclientCallOverviewPanelBuildDir: '/home/pi/3cx-tools/webclient-realtime-call-overview-panel/build/',
Jan  1 19:20:27 3cx npm[26619]:   activeCallsCheckIntervalMs: 500,
Jan  1 19:20:27 3cx npm[26619]:   dialCodes: {},
Jan  1 19:20:27 3cx npm[26619]:   httpPort: 4848,
Jan  1 19:20:27 3cx npm[26619]:   phoneNumberOrder: [
Jan  1 19:20:27 3cx npm[26619]:     'mobile',
Jan  1 19:20:27 3cx npm[26619]:     'mobile2',
Jan  1 19:20:27 3cx npm[26619]:     'private',
Jan  1 19:20:27 3cx npm[26619]:     'private2',
Jan  1 19:20:27 3cx npm[26619]:     'business',
Jan  1 19:20:27 3cx npm[26619]:     'business2',
Jan  1 19:20:27 3cx npm[26619]:     'extra'
Jan  1 19:20:27 3cx npm[26619]:   ]
Jan  1 19:20:27 3cx npm[26619]: }
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.024] [LOG]   running as service
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.029] [LOG]   [Nginx Proxy Snippet Installer] nginx proxy snippet already installed, skipping install
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.302] [LOG]   [3CX REST API] connected
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.366] [LOG]   [Phonebook Monitor] watching phonebook files...
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.368] [LOG]   [Caller ID] started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.374] [LOG]   [Phonebook Yealink] patcher started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.377] [LOG]   [Phonebook Fanvil] patcher started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.381] [LOG]   [Phonebook Snom] patcher started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.386] [LOG]   [Active Calls Monitor] started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.388] [LOG]   [Call Log Monitor] started
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.404] [LOG]   [Web Server] HTTP server listening on port 4848
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.410] [LOG]   [Websocket API] WS api listening...
Jan  1 19:20:27 3cx npm[26619]: [01.01.2022 19:20.27.412] [LOG]   [Dial Code API] listening for calls...
Jan  1 19:20:27 3cx npm[26619]: node:internal/process/promises:246
Jan  1 19:20:27 3cx npm[26619]:           triggerUncaughtException(err, true /* fromPromise */);
Jan  1 19:20:27 3cx npm[26619]:           ^
Jan  1 19:20:27 3cx npm[26619]: [Error: EACCES: permission denied, open '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'] {
Jan  1 19:20:27 3cx npm[26619]:   errno: -13,
Jan  1 19:20:27 3cx npm[26619]:   code: 'EACCES',
Jan  1 19:20:27 3cx npm[26619]:   syscall: 'open',
Jan  1 19:20:27 3cx npm[26619]:   path: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml'
Jan  1 19:20:27 3cx npm[26619]: }
Jan  1 19:20:27 3cx systemd[1]: 3cx-tools-server.service: Main process exited, code=exited, status=1/FAILURE
Jan  1 19:20:27 3cx systemd[1]: 3cx-tools-server.service: Failed with result 'exit-code'.

Permission denied sounds like that the service was not able to write the phonebooks because it was not run as root.
Did you make root the owner of the 3cx-tools folder?
cd 3cx-tools
sudo chown root .

It should look like this (root must be the name in the third column, the name in the fourth column does not matter):
root@vm3cx:~/3cx-tools# ls -al
total 564
drwxr-xr-x   8 root root   4096 Dec 30 13:16 .
drwx------   6 root root   4096 Dec 30 15:36 ..
-rw-r--r--   1 root root   1073 Dec 30 13:16 LICENSE
-rw-r--r--   1 root root   1832 Dec 30 13:16 README.md
drwxr-xr-x   3 root root   4096 Dec 25 21:41 build
-rw-r--r--   1 root root    674 Dec 30 13:16 config.default.json
-rw-r--r--   1 root root    351 Dec 30 13:16 config.dev.json
-rw-r--r--   1 root root    162 Dec 30 13:16 config.local.json
drwxr-xr-x   7 root root   4096 Dec 30 13:16 dev-resources
-rwxr-xr-x   1 root root    199 Dec 30 13:16 jest.config.js
drwxr-xr-x   5 root root   4096 Dec 30 13:16 mc-settings-panel
drwxr-xr-x 459 root root  20480 Dec 29 16:18 node_modules
-rw-r--r--   1 root root 488181 Dec 30 13:16 package-lock.json
-rw-r--r--   1 root root   2061 Dec 30 13:16 package.json
drwxr-xr-x   6 root root   4096 Dec 30 13:16 src
-rw-r--r--   1 root root    168 Dec 30 13:16 tsconfig.eslint.json
-rwxr-xr-x   1 root root    636 Dec 30 13:16 tsconfig.json
drwxr-xr-x   6 root root   4096 Dec 30 13:16 webclient-realtime-call-overview-panel

The reason that this is necessary is that npm will run the application as the user who owns the directory/files. And since we tinker with files that are owned by e.g. the phonesystem we need elevated rights.

Permission denied sounds like that the service was not able to write the phonebooks because it was not run as root.
Did you make root the owner of the 3cx-tools folder?
cd 3cx-tools
sudo chown root .

It should look like this (root must be the name in the third column, the name in the fourth column does not matter):
root@vm3cx:~/3cx-tools# ls -al
total 564
drwxr-xr-x   8 root root   4096 Dec 30 13:16 .
drwx------   6 root root   4096 Dec 30 15:36 ..
-rw-r--r--   1 root root   1073 Dec 30 13:16 LICENSE
-rw-r--r--   1 root root   1832 Dec 30 13:16 README.md
drwxr-xr-x   3 root root   4096 Dec 25 21:41 build
-rw-r--r--   1 root root    674 Dec 30 13:16 config.default.json
-rw-r--r--   1 root root    351 Dec 30 13:16 config.dev.json
-rw-r--r--   1 root root    162 Dec 30 13:16 config.local.json
drwxr-xr-x   7 root root   4096 Dec 30 13:16 dev-resources
-rwxr-xr-x   1 root root    199 Dec 30 13:16 jest.config.js
drwxr-xr-x   5 root root   4096 Dec 30 13:16 mc-settings-panel
drwxr-xr-x 459 root root  20480 Dec 29 16:18 node_modules
-rw-r--r--   1 root root 488181 Dec 30 13:16 package-lock.json
-rw-r--r--   1 root root   2061 Dec 30 13:16 package.json
drwxr-xr-x   6 root root   4096 Dec 30 13:16 src
-rw-r--r--   1 root root    168 Dec 30 13:16 tsconfig.eslint.json
-rwxr-xr-x   1 root root    636 Dec 30 13:16 tsconfig.json
drwxr-xr-x   6 root root   4096 Dec 30 13:16 webclient-realtime-call-overview-panel

The reason that this is necessary is that npm will run the application as the user who owns the directory/files. And since we tinker with files that are owned by e.g. the phonesystem we need elevated rights.

Yes, I did, Just did it again to be sure. Looks like this:
total 584
384003   4 drwxr-xr-x   8 root root   4096 Jan  1 18:40 .
   918   4 drwxr-xr-x   7 pi   pi     4096 Dec 30 13:27 ..
770259   4 drwxr-xr-x   3 root root   4096 Dec 30 13:27 build
385023   4 -rw-r--r--   1 root root    808 Jan  1 19:11 config.default.json
386158   4 -rw-r--r--   1 root root    351 Dec 30 13:27 config.dev.json
385017   4 -rw-r--r--   1 root root    137 Jan  1 19:11 config.local.json
386144   4 -rwxr-xr-x   1 root root    247 Dec 30 13:27 .editorconfig
386151   4 -rwxr-xr-x   1 root root      9 Dec 30 13:27 .eslintignore
386152   4 -rwxr-xr-x   1 root root    509 Dec 30 13:27 .eslintrc.js
770232   4 drwxr-xr-x   8 root root   4096 Jan  1 19:22 .git
386153   4 -rwxr-xr-x   1 root root    272 Dec 30 13:27 .gitignore
386159   4 -rwxr-xr-x   1 root root    199 Dec 30 13:27 jest.config.js
386155   4 -rw-r--r--   1 root root   1073 Dec 30 13:27 LICENSE
770339   4 drwxr-xr-x   5 root root   4096 Dec 30 13:27 mc-settings-panel
770496  20 drwxr-xr-x 117 root root  20480 Dec 30 13:27 node_modules
386161   4 -rw-r--r--   1 root root   2061 Dec 30 13:27 package.json
386160 480 -rw-r--r--   1 root root 488181 Dec 30 13:27 package-lock.json
386154   4 -rwxr-xr-x   1 root root    167 Dec 30 13:27 .prettierrc
386156   4 -rw-r--r--   1 root root   1832 Dec 30 13:27 README.md
386162   4 drwxr-xr-x   6 root root   4096 Jan  1 18:40 src
386171   4 -rw-r--r--   1 root root    168 Dec 30 13:27 tsconfig.eslint.json
386172   4 -rwxr-xr-x   1 root root    636 Dec 30 13:27 tsconfig.json
770424   4 drwxr-xr-x   5 root root   4096 Dec 30 13:27 webclient-realtime-call-overview-panel

Still an error though, but a different one
Jan  1 20:35:29 3cx systemd[1]: Started 3cx-tools-server - custom plugins, tools for 3CX.
Jan  1 20:35:31 3cx npm[3665]: ><EMAIL_ADDRESS>start
Jan  1 20:35:31 3cx npm[3665]: > NODE_ENV=production node build/src/main.js "run-as-service"
Jan  1 20:35:32 3cx npm[3665]:    _____ _______  __    ______            __
Jan  1 20:35:32 3cx npm[3665]:   |__  // ____/ |/ /   /_  __/___  ____  / /____
Jan  1 20:35:32 3cx npm[3665]:    /_ </ /    |   /     / / / __ \/ __ \/ / ___/
Jan  1 20:35:32 3cx npm[3665]:  ___/ / /___ /   |     / / / /_/ / /_/ / (__  )
Jan  1 20:35:32 3cx npm[3665]: /____/\____//_/|_|    /_/  \____/\____/_/____/
Jan  1 20:35:32 3cx npm[3665]: Service '3cx-tools-server' is: NOT ACTIVE
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.157] [LOG]   [Config loader] config loaded {
Jan  1 20:35:32 3cx npm[3665]:   ivrPromptsDir: '/var/lib/3cxpbx/Instance1/Data/Ivr/Prompts',
Jan  1 20:35:32 3cx npm[3665]:   pbxConfigJsonFile: '/var/lib/3cxpbx/Bin/config.json',
Jan  1 20:35:32 3cx npm[3665]:   provisioningDir: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning',
Jan  1 20:35:32 3cx npm[3665]:   webclientDir: '/var/lib/3cxpbx/Data/Http/wwwroot/webclient',
Jan  1 20:35:32 3cx npm[3665]:   mcSettingsPanelBuildDir: '/home/pi/3cx-tools/mc-settings-panel/build/',
Jan  1 20:35:32 3cx npm[3665]:   nginxProxySnippetInstallFile: '/var/lib/3cxpbx/Bin/nginx/conf/snippets/14-3cx-tools-proxy.conf',
Jan  1 20:35:32 3cx npm[3665]:   serviceInstallFile: '/lib/systemd/system/3cx-tools-server.service',
Jan  1 20:35:32 3cx npm[3665]:   webclientCallOverviewPanelBuildDir: '/home/pi/3cx-tools/webclient-realtime-call-overview-panel/build/',
Jan  1 20:35:32 3cx npm[3665]:   activeCallsCheckIntervalMs: 500,
Jan  1 20:35:32 3cx npm[3665]:   dialCodes: {},
Jan  1 20:35:32 3cx npm[3665]:   httpPort: 4848,
Jan  1 20:35:32 3cx npm[3665]:   phoneNumberOrder: [
Jan  1 20:35:32 3cx npm[3665]:     'mobile',
Jan  1 20:35:32 3cx npm[3665]:     'mobile2',
Jan  1 20:35:32 3cx npm[3665]:     'private',
Jan  1 20:35:32 3cx npm[3665]:     'private2',
Jan  1 20:35:32 3cx npm[3665]:     'business',
Jan  1 20:35:32 3cx npm[3665]:     'business2',
Jan  1 20:35:32 3cx npm[3665]:     'extra'
Jan  1 20:35:32 3cx npm[3665]:   ]
Jan  1 20:35:32 3cx npm[3665]: }
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.166] [LOG]   running as service
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.170] [LOG]   [Nginx Proxy Snippet Installer] nginx proxy snippet already installed, skipping install
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.428] [LOG]   [3CX REST API] connected
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.493] [LOG]   [Phonebook Monitor] watching phonebook files...
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.495] [LOG]   [Caller ID] started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.501] [LOG]   [Phonebook Yealink] patcher started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.506] [LOG]   [Phonebook Fanvil] patcher started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.510] [LOG]   [Phonebook Snom] patcher started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.515] [LOG]   [Active Calls Monitor] started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.518] [LOG]   [Call Log Monitor] started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.533] [LOG]   [Web Server] HTTP server listening on port 4848
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.541] [LOG]   [Websocket API] WS api listening...
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.543] [LOG]   [Dial Code API] listening for calls...
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.658] [LOG]   [Phonebook Yealink] yealink phonebook updated
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.659] [LOG]   [Phonebook Fanvil] fanvil phonebook updated
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.660] [LOG]   [Phonebook Snom] snom phonebook updated
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.663] [LOG]   [Call Overview Panel] installed
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.664] [LOG]   [Call Overview Panel] watching for file modifications...
Jan  1 20:35:32 3cx npm[3665]: /home/pi/3cx-tools/build/src/func/call-logs.js:134
Jan  1 20:35:32 3cx npm[3665]:             let extCaller = segments[0].direction === 'incoming'
Jan  1 20:35:32 3cx npm[3665]:                                     ^
Jan  1 20:35:32 3cx npm[3665]: TypeError: Cannot read properties of undefined (reading '0')
Jan  1 20:35:32 3cx npm[3665]:     at /home/pi/3cx-tools/build/src/func/call-logs.js:134:37
Jan  1 20:35:32 3cx npm[3665]:     at Array.map (<anonymous>)
Jan  1 20:35:32 3cx npm[3665]:     at /home/pi/3cx-tools/build/src/func/call-logs.js:131:32
Jan  1 20:35:32 3cx npm[3665]:     at Generator.next (<anonymous>)
Jan  1 20:35:32 3cx npm[3665]:     at fulfilled (/home/pi/3cx-tools/node_modules/tslib/tslib.js:114:62)
Jan  1 20:35:32 3cx npm[3665]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Jan  1 20:35:32 3cx systemd[1]: 3cx-tools-server.service: Main process exited, code=exited, status=1/FAILURE
Jan  1 20:35:32 3cx systemd[1]: 3cx-tools-server.service: Failed with result 'exit-code'.

The is more info in the Yealink Phonebook, but the order is not correct yet. It lists as Business. Mobile, Other. As the order in the XML correspond with should be Mobile, Mobile2, Home, according to the names in 3CX and the numbers shown.
And I noticed there is also an order listed for the phonenumber in the config.default.json.

Yes, I did, Just did it again to be sure. Looks like this:
total 584
384003   4 drwxr-xr-x   8 root root   4096 Jan  1 18:40 .
   918   4 drwxr-xr-x   7 pi   pi     4096 Dec 30 13:27 ..
770259   4 drwxr-xr-x   3 root root   4096 Dec 30 13:27 build
385023   4 -rw-r--r--   1 root root    808 Jan  1 19:11 config.default.json
386158   4 -rw-r--r--   1 root root    351 Dec 30 13:27 config.dev.json
385017   4 -rw-r--r--   1 root root    137 Jan  1 19:11 config.local.json
386144   4 -rwxr-xr-x   1 root root    247 Dec 30 13:27 .editorconfig
386151   4 -rwxr-xr-x   1 root root      9 Dec 30 13:27 .eslintignore
386152   4 -rwxr-xr-x   1 root root    509 Dec 30 13:27 .eslintrc.js
770232   4 drwxr-xr-x   8 root root   4096 Jan  1 19:22 .git
386153   4 -rwxr-xr-x   1 root root    272 Dec 30 13:27 .gitignore
386159   4 -rwxr-xr-x   1 root root    199 Dec 30 13:27 jest.config.js
386155   4 -rw-r--r--   1 root root   1073 Dec 30 13:27 LICENSE
770339   4 drwxr-xr-x   5 root root   4096 Dec 30 13:27 mc-settings-panel
770496  20 drwxr-xr-x 117 root root  20480 Dec 30 13:27 node_modules
386161   4 -rw-r--r--   1 root root   2061 Dec 30 13:27 package.json
386160 480 -rw-r--r--   1 root root 488181 Dec 30 13:27 package-lock.json
386154   4 -rwxr-xr-x   1 root root    167 Dec 30 13:27 .prettierrc
386156   4 -rw-r--r--   1 root root   1832 Dec 30 13:27 README.md
386162   4 drwxr-xr-x   6 root root   4096 Jan  1 18:40 src
386171   4 -rw-r--r--   1 root root    168 Dec 30 13:27 tsconfig.eslint.json
386172   4 -rwxr-xr-x   1 root root    636 Dec 30 13:27 tsconfig.json
770424   4 drwxr-xr-x   5 root root   4096 Dec 30 13:27 webclient-realtime-call-overview-panel

Still an error though, but a different one
Jan  1 20:35:29 3cx systemd[1]: Started 3cx-tools-server - custom plugins, tools for 3CX.
Jan  1 20:35:31 3cx npm[3665]: ><EMAIL_ADDRESS>start
Jan  1 20:35:31 3cx npm[3665]: > NODE_ENV=production node build/src/main.js "run-as-service"
Jan  1 20:35:32 3cx npm[3665]:    _____ _______  __    ______            __
Jan  1 20:35:32 3cx npm[3665]:   |__  // ____/ |/ /   /_  __/___  ____  / /____
Jan  1 20:35:32 3cx npm[3665]:    /_ </ /    |   /     / / / __ \/ __ \/ / ___/
Jan  1 20:35:32 3cx npm[3665]:  ___/ / /___ /   |     / / / /_/ / /_/ / (__  )
Jan  1 20:35:32 3cx npm[3665]: /____/\____//_/|_|    /_/  \____/\____/_/____/
Jan  1 20:35:32 3cx npm[3665]: Service '3cx-tools-server' is: NOT ACTIVE
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.157] [LOG]   [Config loader] config loaded {
Jan  1 20:35:32 3cx npm[3665]:   ivrPromptsDir: '/var/lib/3cxpbx/Instance1/Data/Ivr/Prompts',
Jan  1 20:35:32 3cx npm[3665]:   pbxConfigJsonFile: '/var/lib/3cxpbx/Bin/config.json',
Jan  1 20:35:32 3cx npm[3665]:   provisioningDir: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning',
Jan  1 20:35:32 3cx npm[3665]:   webclientDir: '/var/lib/3cxpbx/Data/Http/wwwroot/webclient',
Jan  1 20:35:32 3cx npm[3665]:   mcSettingsPanelBuildDir: '/home/pi/3cx-tools/mc-settings-panel/build/',
Jan  1 20:35:32 3cx npm[3665]:   nginxProxySnippetInstallFile: '/var/lib/3cxpbx/Bin/nginx/conf/snippets/14-3cx-tools-proxy.conf',
Jan  1 20:35:32 3cx npm[3665]:   serviceInstallFile: '/lib/systemd/system/3cx-tools-server.service',
Jan  1 20:35:32 3cx npm[3665]:   webclientCallOverviewPanelBuildDir: '/home/pi/3cx-tools/webclient-realtime-call-overview-panel/build/',
Jan  1 20:35:32 3cx npm[3665]:   activeCallsCheckIntervalMs: 500,
Jan  1 20:35:32 3cx npm[3665]:   dialCodes: {},
Jan  1 20:35:32 3cx npm[3665]:   httpPort: 4848,
Jan  1 20:35:32 3cx npm[3665]:   phoneNumberOrder: [
Jan  1 20:35:32 3cx npm[3665]:     'mobile',
Jan  1 20:35:32 3cx npm[3665]:     'mobile2',
Jan  1 20:35:32 3cx npm[3665]:     'private',
Jan  1 20:35:32 3cx npm[3665]:     'private2',
Jan  1 20:35:32 3cx npm[3665]:     'business',
Jan  1 20:35:32 3cx npm[3665]:     'business2',
Jan  1 20:35:32 3cx npm[3665]:     'extra'
Jan  1 20:35:32 3cx npm[3665]:   ]
Jan  1 20:35:32 3cx npm[3665]: }
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.166] [LOG]   running as service
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.170] [LOG]   [Nginx Proxy Snippet Installer] nginx proxy snippet already installed, skipping install
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.428] [LOG]   [3CX REST API] connected
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.493] [LOG]   [Phonebook Monitor] watching phonebook files...
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.495] [LOG]   [Caller ID] started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.501] [LOG]   [Phonebook Yealink] patcher started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.506] [LOG]   [Phonebook Fanvil] patcher started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.510] [LOG]   [Phonebook Snom] patcher started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.515] [LOG]   [Active Calls Monitor] started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.518] [LOG]   [Call Log Monitor] started
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.533] [LOG]   [Web Server] HTTP server listening on port 4848
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.541] [LOG]   [Websocket API] WS api listening...
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.543] [LOG]   [Dial Code API] listening for calls...
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.658] [LOG]   [Phonebook Yealink] yealink phonebook updated
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.659] [LOG]   [Phonebook Fanvil] fanvil phonebook updated
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.660] [LOG]   [Phonebook Snom] snom phonebook updated
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.663] [LOG]   [Call Overview Panel] installed
Jan  1 20:35:32 3cx npm[3665]: [01.01.2022 20:35.32.664] [LOG]   [Call Overview Panel] watching for file modifications...
Jan  1 20:35:32 3cx npm[3665]: /home/pi/3cx-tools/build/src/func/call-logs.js:134
Jan  1 20:35:32 3cx npm[3665]:             let extCaller = segments[0].direction === 'incoming'
Jan  1 20:35:32 3cx npm[3665]:                                     ^
Jan  1 20:35:32 3cx npm[3665]: TypeError: Cannot read properties of undefined (reading '0')
Jan  1 20:35:32 3cx npm[3665]:     at /home/pi/3cx-tools/build/src/func/call-logs.js:134:37
Jan  1 20:35:32 3cx npm[3665]:     at Array.map (<anonymous>)
Jan  1 20:35:32 3cx npm[3665]:     at /home/pi/3cx-tools/build/src/func/call-logs.js:131:32
Jan  1 20:35:32 3cx npm[3665]:     at Generator.next (<anonymous>)
Jan  1 20:35:32 3cx npm[3665]:     at fulfilled (/home/pi/3cx-tools/node_modules/tslib/tslib.js:114:62)
Jan  1 20:35:32 3cx npm[3665]:     at processTicksAndRejections (node:internal/process/task_queues:96:5)
Jan  1 20:35:32 3cx systemd[1]: 3cx-tools-server.service: Main process exited, code=exited, status=1/FAILURE
Jan  1 20:35:32 3cx systemd[1]: 3cx-tools-server.service: Failed with result 'exit-code'.

The is more info in the Yealink Phonebook, but the order is not correct yet. It lists as Business. Mobile, Other. As the order in the XML correspond with should be Mobile, Mobile2, Home, according to the names in 3CX and the numbers shown.
And I noticed there is also an order listed for the phonenumber in the config.default.json.

Yes. Every key you define inside the config.local.json will override existing conf from the config.default.json.
Please check that the entries (<Telephone>xxx</Telephone>) inside the xml are in the correct order (on your machine: /var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml).
About the other error. Really weird that you seem to have calls without segments. This is not the case. At least not for the both 3cx instances I have. I'll add a check to skip call logs for calls without segments...

Yes. Every key you define inside the config.local.json will override existing conf from the config.default.json.
Please check that the entries (<Telephone>xxx</Telephone>) inside the xml are in the correct order (on your machine: /var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning/0qlhnihf60youf/yealink_phonebook.xml).
About the other error. Really weird that you seem to have calls without segments. This is not the case. At least not for the both 3cx instances I have. I'll add a check to skip call logs for calls without segments...

Great. The service keeps running now.
But there is an error in the log about segments
Jan  1 22:58:06 3cx npm[15198]: ><EMAIL_ADDRESS>start
Jan  1 22:58:06 3cx npm[15198]: > NODE_ENV=production node build/src/main.js "run-as-service"
Jan  1 22:58:07 3cx npm[15198]:    _____ _______  __    ______            __
Jan  1 22:58:07 3cx npm[15198]:   |__  // ____/ |/ /   /_  __/___  ____  / /____
Jan  1 22:58:07 3cx npm[15198]:    /_ </ /    |   /     / / / __ \/ __ \/ / ___/
Jan  1 22:58:07 3cx npm[15198]:  ___/ / /___ /   |     / / / /_/ / /_/ / (__  )
Jan  1 22:58:07 3cx npm[15198]: /____/\____//_/|_|    /_/  \____/\____/_/____/
Jan  1 22:58:07 3cx npm[15198]: Service '3cx-tools-server' is: NOT ACTIVE
Jan  1 22:58:07 3cx npm[15198]: [01.01.2022 22:58.07.773] [LOG]   [Config loader] config loaded {
Jan  1 22:58:07 3cx npm[15198]:   ivrPromptsDir: '/var/lib/3cxpbx/Instance1/Data/Ivr/Prompts',
Jan  1 22:58:07 3cx npm[15198]:   pbxConfigJsonFile: '/var/lib/3cxpbx/Bin/config.json',
Jan  1 22:58:07 3cx npm[15198]:   provisioningDir: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning',
Jan  1 22:58:07 3cx npm[15198]:   webclientDir: '/var/lib/3cxpbx/Data/Http/wwwroot/webclient',
Jan  1 22:58:07 3cx npm[15198]:   mcSettingsPanelBuildDir: '/home/pi/3cx-tools/mc-settings-panel/build/',
Jan  1 22:58:07 3cx npm[15198]:   nginxProxySnippetInstallFile: '/var/lib/3cxpbx/Bin/nginx/conf/snippets/14-3cx-tools-proxy.conf',
Jan  1 22:58:07 3cx npm[15198]:   serviceInstallFile: '/lib/systemd/system/3cx-tools-server.service',
Jan  1 22:58:07 3cx npm[15198]:   webclientCallOverviewPanelBuildDir: '/home/pi/3cx-tools/webclient-realtime-call-overview-panel/build/',
Jan  1 22:58:07 3cx npm[15198]:   activeCallsCheckIntervalMs: 500,
Jan  1 22:58:07 3cx npm[15198]:   dialCodes: {},
Jan  1 22:58:07 3cx npm[15198]:   httpPort: 4848,
Jan  1 22:58:07 3cx npm[15198]:   phoneNumberOrder: [
Jan  1 22:58:07 3cx npm[15198]:     'mobile',
Jan  1 22:58:07 3cx npm[15198]:     'mobile2',
Jan  1 22:58:07 3cx npm[15198]:     'private',
Jan  1 22:58:07 3cx npm[15198]:     'private2',
Jan  1 22:58:07 3cx npm[15198]:     'business',
Jan  1 22:58:07 3cx npm[15198]:     'business2',
Jan  1 22:58:07 3cx npm[15198]:     'extra'
Jan  1 22:58:07 3cx npm[15198]:   ]
Jan  1 22:58:07 3cx npm[15198]: }
Jan  1 22:58:07 3cx npm[15198]: [01.01.2022 22:58.07.782] [LOG]   running as service
Jan  1 22:58:07 3cx npm[15198]: [01.01.2022 22:58.07.788] [LOG]   [Nginx Proxy Snippet Installer] nginx proxy snippet already installed, skipping install
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.072] [LOG]   [3CX REST API] connected
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.138] [LOG]   [Phonebook Monitor] watching phonebook files...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.139] [LOG]   [Caller ID] started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.146] [LOG]   [Phonebook Yealink] patcher started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.151] [LOG]   [Phonebook Fanvil] patcher started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.155] [LOG]   [Phonebook Snom] patcher started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.160] [LOG]   [Active Calls Monitor] started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.163] [LOG]   [Call Log Monitor] started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.180] [LOG]   [Web Server] HTTP server listening on port 4848
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.187] [LOG]   [Websocket API] WS api listening...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.188] [LOG]   [Dial Code API] listening for calls...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.304] [LOG]   [Phonebook Yealink] yealink phonebook updated
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.305] [LOG]   [Phonebook Fanvil] fanvil phonebook updated
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.307] [LOG]   [Call Overview Panel] installed
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.308] [LOG]   [Call Overview Panel] watching for file modifications...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.310] [LOG]   [Phonebook Snom] snom phonebook updated
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.378] [ERROR] [Call Log Monitor] segments is undefined. call: {
Jan  1 22:58:08 3cx npm[15198]:   id: 1224,
Jan  1 22:58:08 3cx npm[15198]:   start_time: 2021-12-28T11:47:29.000Z,
Jan  1 22:58:08 3cx npm[15198]:   end_time: 2021-12-28T11:47:29.000Z,
Jan  1 22:58:08 3cx npm[15198]:   is_answered: false,
Jan  1 22:58:08 3cx npm[15198]:   ringing_dur: null,
Jan  1 22:58:08 3cx npm[15198]:   talking_dur: null,
Jan  1 22:58:08 3cx npm[15198]:   q_wait_dur: null
Jan  1 22:58:08 3cx npm[15198]: }
Jan  1 22:58:11 3cx npm[15198]: [01.01.2022 22:58.11.319] [LOG]   [Phonebook Yealink] yealink phonebook updated
Jan  1 22:58:11 3cx npm[15198]: [01.01.2022 22:58.11.320] [LOG]   [Phonebook Fanvil] fanvil phonebook updated
Jan  1 22:58:11 3cx npm[15198]: [01.01.2022 22:58.11.321] [LOG]   [Phonebook Snom] snom phonebook updated

I found out why the W60B doesn't display the correct names with the numbers. I downloaded a template from the base station and that only lists "OfficeNumber","MobileNumber","OtherNumber", in that order. Also, when I try to create a new contact in the address book on the phone itself, it only has these options. So there aren't anymore, probably.
So, I will use OfficeNumber (Yealink) for Private (3CX), MobileNumber (Yealink) for Mobile (3CX), and OtherNumber (Yealink) for Mobile2 (3CX). This should be the order, right?
{
  "phoneNumberOrder": [
    "private",
    "mobile",
    "mobile2",
    "extra",
    "private2",
    "business",
    "business2"
}

Doesn't change with it though, unfortunately :-(
Seems like whatever I choose as order, it doesn't change.

Great. The service keeps running now.
But there is an error in the log about segments
Jan  1 22:58:06 3cx npm[15198]: ><EMAIL_ADDRESS>start
Jan  1 22:58:06 3cx npm[15198]: > NODE_ENV=production node build/src/main.js "run-as-service"
Jan  1 22:58:07 3cx npm[15198]:    _____ _______  __    ______            __
Jan  1 22:58:07 3cx npm[15198]:   |__  // ____/ |/ /   /_  __/___  ____  / /____
Jan  1 22:58:07 3cx npm[15198]:    /_ </ /    |   /     / / / __ \/ __ \/ / ___/
Jan  1 22:58:07 3cx npm[15198]:  ___/ / /___ /   |     / / / /_/ / /_/ / (__  )
Jan  1 22:58:07 3cx npm[15198]: /____/\____//_/|_|    /_/  \____/\____/_/____/
Jan  1 22:58:07 3cx npm[15198]: Service '3cx-tools-server' is: NOT ACTIVE
Jan  1 22:58:07 3cx npm[15198]: [01.01.2022 22:58.07.773] [LOG]   [Config loader] config loaded {
Jan  1 22:58:07 3cx npm[15198]:   ivrPromptsDir: '/var/lib/3cxpbx/Instance1/Data/Ivr/Prompts',
Jan  1 22:58:07 3cx npm[15198]:   pbxConfigJsonFile: '/var/lib/3cxpbx/Bin/config.json',
Jan  1 22:58:07 3cx npm[15198]:   provisioningDir: '/var/lib/3cxpbx/Instance1/Data/Http/Interface/provisioning',
Jan  1 22:58:07 3cx npm[15198]:   webclientDir: '/var/lib/3cxpbx/Data/Http/wwwroot/webclient',
Jan  1 22:58:07 3cx npm[15198]:   mcSettingsPanelBuildDir: '/home/pi/3cx-tools/mc-settings-panel/build/',
Jan  1 22:58:07 3cx npm[15198]:   nginxProxySnippetInstallFile: '/var/lib/3cxpbx/Bin/nginx/conf/snippets/14-3cx-tools-proxy.conf',
Jan  1 22:58:07 3cx npm[15198]:   serviceInstallFile: '/lib/systemd/system/3cx-tools-server.service',
Jan  1 22:58:07 3cx npm[15198]:   webclientCallOverviewPanelBuildDir: '/home/pi/3cx-tools/webclient-realtime-call-overview-panel/build/',
Jan  1 22:58:07 3cx npm[15198]:   activeCallsCheckIntervalMs: 500,
Jan  1 22:58:07 3cx npm[15198]:   dialCodes: {},
Jan  1 22:58:07 3cx npm[15198]:   httpPort: 4848,
Jan  1 22:58:07 3cx npm[15198]:   phoneNumberOrder: [
Jan  1 22:58:07 3cx npm[15198]:     'mobile',
Jan  1 22:58:07 3cx npm[15198]:     'mobile2',
Jan  1 22:58:07 3cx npm[15198]:     'private',
Jan  1 22:58:07 3cx npm[15198]:     'private2',
Jan  1 22:58:07 3cx npm[15198]:     'business',
Jan  1 22:58:07 3cx npm[15198]:     'business2',
Jan  1 22:58:07 3cx npm[15198]:     'extra'
Jan  1 22:58:07 3cx npm[15198]:   ]
Jan  1 22:58:07 3cx npm[15198]: }
Jan  1 22:58:07 3cx npm[15198]: [01.01.2022 22:58.07.782] [LOG]   running as service
Jan  1 22:58:07 3cx npm[15198]: [01.01.2022 22:58.07.788] [LOG]   [Nginx Proxy Snippet Installer] nginx proxy snippet already installed, skipping install
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.072] [LOG]   [3CX REST API] connected
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.138] [LOG]   [Phonebook Monitor] watching phonebook files...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.139] [LOG]   [Caller ID] started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.146] [LOG]   [Phonebook Yealink] patcher started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.151] [LOG]   [Phonebook Fanvil] patcher started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.155] [LOG]   [Phonebook Snom] patcher started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.160] [LOG]   [Active Calls Monitor] started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.163] [LOG]   [Call Log Monitor] started
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.180] [LOG]   [Web Server] HTTP server listening on port 4848
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.187] [LOG]   [Websocket API] WS api listening...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.188] [LOG]   [Dial Code API] listening for calls...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.304] [LOG]   [Phonebook Yealink] yealink phonebook updated
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.305] [LOG]   [Phonebook Fanvil] fanvil phonebook updated
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.307] [LOG]   [Call Overview Panel] installed
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.308] [LOG]   [Call Overview Panel] watching for file modifications...
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.310] [LOG]   [Phonebook Snom] snom phonebook updated
Jan  1 22:58:08 3cx npm[15198]: [01.01.2022 22:58.08.378] [ERROR] [Call Log Monitor] segments is undefined. call: {
Jan  1 22:58:08 3cx npm[15198]:   id: 1224,
Jan  1 22:58:08 3cx npm[15198]:   start_time: 2021-12-28T11:47:29.000Z,
Jan  1 22:58:08 3cx npm[15198]:   end_time: 2021-12-28T11:47:29.000Z,
Jan  1 22:58:08 3cx npm[15198]:   is_answered: false,
Jan  1 22:58:08 3cx npm[15198]:   ringing_dur: null,
Jan  1 22:58:08 3cx npm[15198]:   talking_dur: null,
Jan  1 22:58:08 3cx npm[15198]:   q_wait_dur: null
Jan  1 22:58:08 3cx npm[15198]: }
Jan  1 22:58:11 3cx npm[15198]: [01.01.2022 22:58.11.319] [LOG]   [Phonebook Yealink] yealink phonebook updated
Jan  1 22:58:11 3cx npm[15198]: [01.01.2022 22:58.11.320] [LOG]   [Phonebook Fanvil] fanvil phonebook updated
Jan  1 22:58:11 3cx npm[15198]: [01.01.2022 22:58.11.321] [LOG]   [Phonebook Snom] snom phonebook updated

I found out why the W60B doesn't display the correct names with the numbers. I downloaded a template from the base station and that only lists "OfficeNumber","MobileNumber","OtherNumber", in that order. Also, when I try to create a new contact in the address book on the phone itself, it only has these options. So there aren't anymore, probably.
So, I will use OfficeNumber (Yealink) for Private (3CX), MobileNumber (Yealink) for Mobile (3CX), and OtherNumber (Yealink) for Mobile2 (3CX). This should be the order, right?
{
  "phoneNumberOrder": [
    "private",
    "mobile",
    "mobile2",
    "extra",
    "private2",
    "business",
    "business2"
}

Doesn't change with it though, unfortunately :-(
Seems like whatever I choose as order, it doesn't change.

Make sure to restart the service after every change to local config (sudo systemctl restart 3cx-tools-service).
Could also be reasonable to restart the phone to circumvent the phone to cache old views.
I know someone with a W60B and two W56H. Maybe I am able to test this myself...
About the error: ignore it. Seems like everything is okay. You just had one call with id: 1224 in the past which seems to have an incomplete log entry. Maybe your instance was interrupted before the call log could be written completely.

However, I'm really disappointed with all of my 3CX instances. I'm seriously considering switching to FreePBX. Even simple features like distinctive ringtones per line are just not possible with 3CX.
FreePBX on the other hand lacks a proper contact management, callerId lookup as well as call panel.
But as I'm also not happy with what 3CX provides for home/small businesses I think I'll have to build a simple panel myself (FOP2 / iSymphony are also really bad).

Make sure to restart the service after every change to local config (sudo systemctl restart 3cx-tools-service). Could also be reasonable to restart the phone to circumvent the phone to cache old views.

I restart the service every time I change something. And I look at the XML directly with the webbrowser, not on the phone.

I know someone with a W60B and two W56H. Maybe I am able to test this myself...

That would be helpfull and faster/easier to troubleshoot for sure ;-)

However, I'm really disappointed with all of my 3CX instances. I'm seriously considering switching to FreePBX. Even simple features like distinctive ringtones per line are just not possible with 3CX. FreePBX on the other hand lacks a proper contact management, callerId lookup as well as call panel. But as I'm also not happy with what 3CX provides for home/small businesses I think I'll have to build a simple panel myself (FOP2 / iSymphony are also really bad).

Hmmm. I use it (free version) at home and it does what it should for home use. Will take a look at FreePBX though, always looking for something different/better/easier ;-)

Hey @TheLion I was not able to test the order "problem" on the yealink phones yet, but the general caching problem could be solved by lowering the refresh time inside the admin panel of the dect bridge.
Please see the new Readme hint. I don't intend to develop any further for 3CX as I switched to FreePBX. But I migrated the phonebook generation to FreePBX and also massively improved the panel itself.
Please look at: https://github.com/adroste/freepbx-realtime-calls-contacts-panel


Added callback examples

Fixes #1104 with style, grace, clarity, efficiency and good humor

FYI hyperlink won't work until merged


Setting description via Job DSL

Job DSL API suggests you can only set the build name, not the build description.
Do you plan to support also description setting via Job DSL?

And also setting Set build name before build starts and Set build name after build ends.

As I remember there were some problems with compatibility with older versions once description has started to be supported.


Unable to select version for range

Note: If you use the fuzzy expressions such as 'can't use/no effect/problem/error', but don't give any relevant auxiliary information according to the template below, this issue will be not replied.

Hi!
I was trying to use the version system of xmake packages, which works except when I try to specify a version.
Describe the bug
Specifying a package version doesn't work and cause a Lua error.
Example script (from the console example)
add_rules("mode.debug", "mode.release")
add_requires("pcre 1.3.x")

target("test2")
    set_kind("binary")
    add_files("src/*.c")

I used "pcre 1.3.x" version from xmake documentation.
Expected behavior
I was expecting it to work and includes a package with a specified version.
Error output
test2$ xmake.exe -v -D
checking for architecture ... x64
checking for Microsoft Visual Studio (x64) version ... 2019
checkinfo: cannot runv(unzip.exe -v), No such file or directory
error: @programdir\core\main.lua:284: @programdir\core\sandbox\modules\import\core\base\task.lua:65: ...gramdir\core\sandbox\modules\import\core\base\semver.lua:88: unable to select version for range '1.3.x'
stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:792]: in function 'raise'
    [...gramdir\core\sandbox\modules\import\core\base\semver.lua:88]: in function 'select'
    [@programdir\actions\require\impl\package.lua:260]: in function '_select_package_version'
    [@programdir\actions\require\impl\package.lua:353]: in function '_load_package'
    [@programdir\actions\require\impl\package.lua:395]: in function '_load_packages'
    [@programdir\actions\require\impl\package.lua:741]: in function 'load_packages'
    [@programdir\actions\require\impl\package.lua:759]: in function 'install_packages'
    [@programdir\actions\require\install.lua:162]: in function 'install_requires'
    [@programdir\actions\config\main.lua:272]:
    [C]: in function 'load'
    [@programdir\core\base\task.lua:520]: in function 'run'
    [@programdir\core\sandbox\modules\import\core\base\task.lua:63]: in function 'run'
    [@programdir\actions\build\main.lua:99]:
    [C]: in function 'load'
    [@programdir\core\base\task.lua:520]: in function 'run'
    [@programdir\core\main.lua:282]: in function 'cotask'
    [@programdir\core\base\scheduler.lua:317]:

stack traceback:
        [C]: in function 'error'
        @programdir\core\base\os.lua:792: in function 'raise'
        @programdir\core\main.lua:284: in function 'cotask'
        @programdir\core\base\scheduler.lua:317: in function <@programdir\core\base\scheduler.lua:315>

Related Environment
Please provide compiling and running environment information:

xmake version: v2.3.8+202010172345
os: Windows 10 2004 (same with Linux)
target platform: Windows 10 2004 (same with Linux)

Sorry, I wrote the version number casually. You can go to pcre official website or go to https://github.com/xmake-io/xmake-repo/blob/master/packages/p/pcre/xmake.lua to view the actual version number.
add_requires("pcre 8.x")

or
add_requires("pcre 8.40")

or
add_requires("pcre")

And you need write add_packages("pcre") to bind pcre package to the given target (it will add links/includedirs).
add_rules("mode.debug", "mode.release")
add_requires("pcre 8.x")

target("test2")
    set_kind("binary")
    add_files("src/*.c")
    add_packages("pcre")

Oh ok, I though it was a version parsing problem, alright.
Actually I was having this problem with curl, the version on xmake-repo doesn't compile on Windows because of an empty testing file. So I wrote a little script to fetch and download all curls versions.
Generating something like
add_versions("7.73.0", "cf34fe0b07b800f1c01a499a6e8b2af548f6d0e044dca4a29d88a4bee146d131")
add_versions("7.72.0", "ad91970864102a59765e20ce16216efc9d6ad381471f7accceceab7d905703ef")
add_versions("7.71.1", "9d52a4d80554f9b0d460ea2be5d7be99897a1a9f681ffafe739169afd6b4f224")
add_versions("7.71.0", "600f00ac2481a89548a4141ddf983fd9386165e1960bac91d0a1c81dca5dd341")
add_versions("7.70.0", "a50bfe62ad67a24f8b12dd7fd655ac43a0f0299f86ec45b11354f25fbb5829d0")
add_versions("7.69.1", "2ff5e5bd507adf6aa88ff4bbafd4c7af464867ffb688be93b9930717a56c4de8")
add_versions("7.69.0", "668d451108a7316cff040b23c79bc766e7ed84122074e44f662b8982f2e76739")
add_versions("7.68.0", "207f54917dd6a2dc733065ccf18d61bb5bebeaceb5df49cd9445483e8623eeb9")
add_versions("7.67.0", "dd5f6956821a548bf4b44f067a530ce9445cc8094fd3e7e3fc7854815858586c")
add_versions("7.66.0", "6618234e0235c420a21f4cb4c2dd0badde76e6139668739085a70c4e2fe7a141")
add_versions("7.65.3", "0a855e83be482d7bc9ea00e05bdb1551a44966076762f9650959179c89fce509")
add_versions("7.65.2", "8093398b51e7d8337dac6f8fa6f1f77d562bdd9eca679dff9d9c3b8160ebfd28")
add_versions("7.65.1", "cbd36df60c49e461011b4f3064cff1184bdc9969a55e9608bf5cadec4686e3f7")
...```

I suppose there's no best way to register many versions at once? (sorry for asking here, I'm gonna make a pull request on https://github.com/xmake-io/xmake-repo when my script finishes)

Although xmake supports the installation of multi-version packages, the long version list is not convenient for maintenance. A package in xmake-repo only accepts no more than 10 versions. We can select the latest 10 versions or 10 major versions to add to xmake-repo
If you want to install any version, you can define package("curl") in your own project xmake.lua to use it, then you can add any version number in it. You can refer https://github.com/tboox/benchbox, this project example will give priority to the package defined in its own local repository
you can also remove all ʻadd_versions`, which will allow users to choose any version package, it will ignore sha256 checksum.

Oh okay. But wouldn't be good to add a way to specify a package version that isn't listed? I couldn't find a way to install libcurl 7.65 because only libcurl 7.64 is listed. I'll check to make my own private repository but I find it a bit sad that I have to make a whole xmake repository just to select a new version. Maybe I missed a way to do that?
Thank you.

In the package in the self-built repository, you can install any version package without defining add_versions.
But for the official repository of xmake-repo, we will consider the integrity and security of the package, so we need to strictly set the version and sha256 verification.
But you can also specify any branch name, If this package (curl) exists git url.
package("curl")
    add_urls("https://github.com/curl/curl.git")
    -- ...

add_requires("curl branchxx")

Of course, I can also consider adding a parameter to allow users to ignore version verification, so that they can choose any version. for example:
add_requires("curl 7.67.0", {verify = false})

But you need to wait a day or two to get this new feature, because i need to rest now.

No problem, thanks for the quick answers and solution!

I have supported {verify = false} option to ignore sha256sum to install any version package. you can update to dev version and try it again. xmake update -s dev
But to disable verify you need to know the following

Semantic version selection is not supported, so you must write a clear version number, for example: 7.67.0
The downloaded package has no integrity check


ENH: simple serial acquisition source

Current acquisition source only supports reading actual bytes.
An additional acquisition source capable of reading and writing regular characters should also be added for beginners that usually send characters over serial instead of bytes. (For example using serial.print() when using arduino)

Implemented.


Add outline token type

Is your feature request related to a problem? Please describe.

Similar to the way border currently works, I would love to see an outline option. This would be great for mapping to outline in the web spec. outline is a great tool to use, especially when considering accessibility in design.
Describe the solution you'd like

Creating a new token type called Token. It would function similar to the existing Border token type.

Proposing 4 sub fields as a part of the outline token type:

color
width
style: outline-style - none | dotted | dashed | solid | double | groove | ridge | inset | outset
offset: would map to outline-offset

Describe alternatives you've considered

Using the Box Shadow token type is somewhat of a work around, but does not allow for offset line outline does.
Additional context

N/A

We're currently sticking close to the W3C DTCG spec for any new token types, so this one is not on the list so far.

@six7 proposing to archive as outline as a token type not in the spec today and we will be aligning with new token types as they appear moving forward


Get-MasterZoneFile throws HTTP 406 Not Acceptable error

Attempting to use Get-MasterZoneFile currently throws a WebException error due to an HTTP 406 Not Acceptable response by the server. Depending on the PowerShell version, it may also include the JSON response body that gives a better indication of what's wrong.
{
    "type":  "https://problems.luna.akamaiapis.net/authoritative-dns/notAcceptable",
    "title":  "Unable to\r\nrespect Accept header",
    "instance":  "1539501e-fce1-4998-8dc1-2e1a03fcd02a",
    "status":  406,
    "detail":  "The content type you\r\nrequested cannot be produced.",
    "supportedContentTypes":  [
                                  "application/json"
                              ],
    "requestedContentType":  "text/dns"
}

Apparently not all endpoints support sending application/json responses. So Invoke-AkamaiRestMethod needs to be modified to support a configurable Accept header.

Apologies for the delay, didnt have my notifications set up, and wasnt actually aware anyone else was using this yet. :-) Comments in the PR

Accept header can be passed by using AdditionalHeaders param. Any members there will overwrite headers in Invoke-AkamaiRestMethod


Tasks 8-11 Done (ability to manipulate the data)

Adding the ability to add or alter the data.
Task 8: automating migrations in Vagrant
Task 9: Allowing the users to post
Task 10: Checking our code
Task 11: Committing and pushing our changes

Redundant PR


Add supportedPlatforms param to Snack embeds

At the request of @rachelnabors, I added support to Snack for the supportedPlatforms URL query param that lets you specify what platforms a Snack will run on. This PR integrates the param into the Snack Remarkable plugin used here and gives an example of using it on the RefreshControl API reference page.
Here is what it looks like with the web option disabled on the RefreshControl page:

Rebased and merged.


Dashboard kata

This is looking really good...  @RasonJ has a couple of tweaks from watching @epugh  go through it, and then this will be ready for merging.


spelling, grammar, links fixes

Description of your changes

Fixes #
I have:

[x] Read and followed Upbound's contribution process.
[ ] Run make reviewable to ensure this PR is ready for review.
[ ] Added backport release-x.y labels to auto-backport this PR, as appropriate.

How has this code been tested

No code changes. General spelling, grammar, and links fixes.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Add FAQ item about manually adding lyrics to a file

Summary
This is a…

[ ] Correction
[x] Addition
[ ] Restructuring
[ ] Minor / simple change (like a typo)
[ ] Other

Reason for the Change
Question about adding lyrics comes up from time to time in the forums.
Description of the Change
Add FAQ response for the question, using the response by outsidecontext in https://community.metabrainz.org/t/how-to-manually-add-the-lyric-metadata/575945 as a basis.
Additional Action Required
None.

TBH, I'm not really convinced this is needed.
As you suggest, perhaps it should be dropped in favour of a small section on using the tag editor in general.  Believe it or not, I've never used that functionality, so I'll have to do some experimenting before I can document it.  Do you have any suggestions on where this explanation would best fit in the document.  I'm not sure the FAQ section is the right place.

Just a note to remind me that the screen shot for whichever way we decide to go will need to be changed when https://github.com/metabrainz/picard/pull/2077 is applied.


Install using non-standard mysql port

Describe the bug
A clear and concise description of what the bug is.
Installing the app using an offloaded mysql server with non standard port
To Reproduce
Steps to reproduce the behavior:

Go to ' installer'
under MySql Database Parameters
MySQL Server IP/FQDN:  fqdn:3308  also tried fpdn,3308
Error     'MySQL Error: (1049) Unknown database '3308'

Expected behavior
I would expect that the installer would accept the port number to configure the instance of mysql
Screenshots
If applicable, add screenshots to help explain your problem.
Server : ipsk app

OS: Oracle Linux 8
Server:  MySql
OS: Oracle Linux 8
MySql version: 8

Additional context
Add any other context about the problem here.
As stated above attempting to install the ipsk app using an external  MySql server using a non-standard port
Thanks,
Rene

@rene-paq While investigating this issue, I was not able to reproduce the error.  I was successfully able to use both FQDN and IP with the host:port format on the installer page, as well as within the configuration file after installation.

Have you been able to confirm database access with mysql CLI utility?
Have you confirmed network access to the mysql server from the server where the installer is being run?

Please let me know your findings.
Regards,
Gary


why do I get high ISR count on sdbus.sys?

etl trace https://www.pastefile.com/jooDiv
system is sluggish

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 4639a65e-5ec8-2935-37fd-7e8e636f8546
Version Independent ID: 24511b4a-afe6-ca90-dfda-855203d60af5
Content: SD Bus Driver Design Guide
Content Source: windows-driver-docs-pr/sd/index.md
Product: windows-hardware
GitHub Login: @windows-driver-content
Microsoft Alias: windowsdriverdev

Thank you for reaching out to us. Unfortunately, we do not have the capability to provide help with your project.


[Feature Request] GPU Acceleration

I've been looking at how fast terminals like Alacritty or Kitty work and I've been seeing how they use GPU acceleration. I think it would be really nice to have this feature of Extraterm. Is this something that can be done with Electron?
Thanks

Yes this is something which can be done on Electron. xterm.js actually has rendering support which uses the GPU directly.
The text rendering part of Extraterm was rewritten over the summer and is now much much faster than before. It doesn't use the GPU directly for doing the glyphs, but it does use it indirectly for a lot compositing "layers" together to get to the final coloured image. I think it is one of the faster implementations which run on web tech.
The bigger picture here is that people conflate text rendering speed with how fast the terminal feels to use.  Konsole is a good example of a terminal emulator which feels very fast but (as far as I know) doesn't use the GPU directly like Kitty or Alacritty. Remember that a terminal emulator isn't like a text editor. Between pressing a key and seeing something change on screen, a lot of communication occurs between different processes on your computer and/or else where on the network. This can add a lot of latency which makes things feel slow even if the rendering speed itself is very fast.
So, yes. The rendering speed in Extraterm has improved a lot. There is still room for improvement but the low hanging fruit here is probably not in the rendering part. Improving performance is a continuous process.

What I found really helped my terminal "feel" a lot faster was cleaning out zsh profile. A lot of applications that have been put in there to start up automatically was really slowing it down. From the time I would open the terminal until I was ready to start typing was like 4-5 seconds. After doing some profiling and cleaning it out, setting some things to lazy load, etc, from the time I open it now to the time it is ready to start typing is about 0.5 seconds.
If you use zsh, this might help: https://blog.jonlu.ca/posts/speeding-up-zsh Check out the links at the bottom as well. If you don't use zsh, there are other similar sites and posts out there that you can locate. The premise is the same.

I just tried extraterm on windows with a pretty powerful computer and the key input is incredibly slow. I'm using WSL and there is significant lag between typing and letters showing up. This does not happen in other terminals I use.

The performance is really suffering on my end too.
Are there any other easier bottlenecks to tackle? @sedwards2009

I have some news about this.
I'm also not happy enough about the speed here. In the last few weeks I've spent some time playing with web assembly and also WebGL. I've got some proof of concept code for the text rendering in WebGL working and I'm quite positive about it. Right now I'm working on improving the text rendering quality (think: allowing subpixel AA to work), but I might just continue an go onto moving the rendering over to WebGL.

I have some news about this.
I'm also not happy enough about the speed here. In the last few weeks I've spent some time playing with web assembly and also WebGL. I've got some proof of concept code for the text rendering in WebGL working and I'm quite positive about it. Right now I'm working on improving the text rendering quality (think: allowing subpixel AA to work), but I might just continue an go onto moving the rendering over to WebGL.

That's such good news!
It's becoming one of the best terminals on Windows, the only thing holding it back right now is the performance which badly suffers. On Mac I had the habit of leaving terminal open on one of my virtual desktops at all times, I used to this on Windows with extraterm, but noticed that even when the window isn't visible it's slowing down the general UI experience overall! I think that's also relevant to the structure of Windows platform - that allows an invisible program to slow the whole system in the first place - but also something must be taking place in the background anyways.
Worth mentioning it's not CPU intensive, but the snappiness of the system is 30% down as soon as extraterm opened somewhere.

Version 0.53.0 now uses the GPU (WebGL) for rendering glyphs. This brings a speed up, but I'll be the first to admit that there is still work to be done with respect to latency and through put.


Enable compilation with clang-cl (LLVM on Windows)

Posting for feedback. This is mostly minor fixes for warnings using the LLVM toolchain and one compiler error with the XMMATRIX constants. I intend to squash these changes after resolving the remaining -Wswitch warnings ("enumeration values not handled in switch", cf. C4062) but want to get some feedback before finishing off the remaining work. I've included new projects here that use the LLVM toolchain for reference but I don't expect to keep those for the merge.

Note I've done some cleanups in the past. See this issue. I feel like at least a few of these warnings just need suppression instead of 'fixing' as they are really just noise and hard to maintain (like -Wnonportable-include-path and -Wnonportable-system-include-path.

I'm wiling to take most of these changes, but not hte LLVM vcxproj or sln projects as I really don't want to maintain them.
Can you look at why you didn't get BC6BC7.cpp in your review since that has the same SIGN_EXTEND and #pragma prefast?
I do appreciate the work here.

No problem leaving out the project files, those were more for reference than for merging. I haven't had a chance to look into the -Wswitch warnings yet so I'll leave that for another PR. Good news there is that MSVC does have a corresponding warning that can be enabled (C4062, off by default).

Accepted the changes here except the vcxproj/slns, plus fixed BC6HBC7.cpp in this commit. You'll probably want to git rebase master your working branch after syncing master.

Thanks Chuck!

BTW, if you have the time & inclination, a similar clang/LLVM warning pass on DirectXMesh would be great. I did a pass on DirectX Tool Kit a while back, so that one is in better shape.


Enhancement: Update api versions for policy defs and subscription resources and add clarity for resource lock param desc.

Overview/Summary
Add some general enhancements to parameter descriptions for resource locks as well as updated outdated API versions.
This PR fixes/adds/changes/removes

Added clarity for resource locks parameter descriptions.
Update API versions for subscription resources (subscription placement module) and policy definition resources (custom policy definitions modules/MC custom definitions module).

Breaking Changes

None

Testing Evidence
Deployed updated API version resources over the top of previous release with no issues.
As part of this Pull Request I have

[x] Read the Contribution Guide and ensured this PR is compliant with the guide
[x] Ensured the resource API versions in .bicep file/s I am adding/editing are using the latest API version possible
[x] Checked for duplicate Pull Requests
[ ] Associated it with relevant GitHub Issues
[x] (ALZ Bicep Core Team Only) Associated it with relevant ADO Items
[x] Ensured my code/branch is up-to-date with the latest changes in the main branch
[x] Performed testing and provided evidence.
[x] Updated one or more of the following tests (if required)

Unit
Linting
E2E (End-To-End)
ValidateAzCloud (Base validation in Azure Cloud)
ValidateMcCloud (Base validation in Azure China Cloud)

[x] Updated relevant and associated documentation (e.g. Contribution Guide, Module READMEs, Wiki Docs etc.)
[ ] If relevant, created or updated Code Tours here

/azp az validate


0.32.6

Codecov Report

Merging #464 into master will increase coverage by 0.02%.
The diff coverage is 96.26%.

@@            Coverage Diff             @@
##           master     #464      +/-   ##
==========================================
+ Coverage   92.58%   92.60%   +0.02%
==========================================
  Files          92       92
  Lines       17930    18021      +91
==========================================
+ Hits        16601    16689      +88
- Misses       1329     1332       +3

Impacted Files
Coverage Δ

src/lib/environment/mod.rs
88.84% <88.23%> (-0.19%)
:arrow_down:

src/lib/environment/mod_test.rs
96.07% <92.59%> (-0.10%)
:arrow_down:

src/lib/descriptor/mod.rs
86.56% <100.00%> (+0.03%)
:arrow_up:

src/lib/execution_plan_test.rs
94.95% <100.00%> (+0.02%)
:arrow_up:

src/lib/installer/mod.rs
71.42% <100.00%> (+0.34%)
:arrow_up:

src/lib/scriptengine/mod.rs
94.16% <100.00%> (+0.17%)
:arrow_up:

src/lib/types.rs
85.59% <100.00%> (+0.13%)
:arrow_up:

src/lib/types_test.rs
95.93% <100.00%> (+0.06%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 80e82c0...7f9f19b. Read the comment docs.


Update just-in-time-access-usage.yml - Future tense consistency with other articles

Future tense consistency with other articles.

This is not the standard we use to write documents. Thank you for your contribution.
#please-close

@dcurwin thank you. I considered it standard since it appears in other articles and tutorials, updated even in 2024. Can you please point me to some documentation with regards to the standard?

@dcurwin thank you. I considered it standard since it appears in other articles and tutorials, updated even in 2024. Can you please point me to some documentation with regards to the standard?

https://learn.microsoft.com/en-us/style-guide/grammar/verbs#verb-tense


Build failed for ios/amd64 and ios/arm64

What version of Go are you using (go version)?

$ go version
go version go1.16beta1 darwin/arm64

Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/enty8080/Library/Caches/go-build"
GOENV="/Users/enty8080/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/enty8080/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="ios"
GOPATH="/Users/enty8080/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.16beta1"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="0"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/mp/l216mspj1r793n3f2zhh8vg40000gn/T/go-build1094833471=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

$ export GOOS=ios
$ export GOARCH=arm64
$ go build main.go
# command-line-arguments
loadinternal: cannot find runtime/cgo
$ export GOARCH=amd64
$ go build main.go
# command-line-arguments
loadinternal: cannot find runtime/cgo
/usr/local/go/pkg/tool/darwin_arm64/link: running clang failed: exit status 1
ld: warning: ignoring file /tmp/go-link-478913935/go.o, building for macOS-arm64 but attempting to link with file built for unknown-x86_64
Undefined symbols for architecture arm64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Duplicate of https://github.com/golang/go/issues/43343?

@eliasnaur Sorry


Link to the uploaded package version in notication e-mail.

We could consider also including the new version number in the clear text...

It is in the subject of the email. Shall I just keep it in "new version of package [pkg] [version]:" just before the URL?


Update log4j version

What is the purpose of the change
Brief changelog
Verifying this change

Checklist

[x] Make sure there is a GitHub_issue field for the change (usually before you start working on it). Trivial changes like typos do not require a GitHub issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[ ] Each commit in the pull request should have a meaningful subject line and body.
[ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[ ] Check if is necessary to patch to Dubbo 3 if you are work on Dubbo 2.7
[ ] Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add sample in dubbo samples project.
[ ] Add some description to dubbo-website project if you are requesting to add a feature.
[ ] GitHub Actions works fine on your own branch.
[ ] If this contribution is large, please follow the Software Donation Guide.

Already resolved in https://github.com/apache/dubbo/pull/9434

2.17.0 is out you probably want to use that

see: https://logging.apache.org/log4j/2.x/security.html#CVE-2021-45105


Decoupled Architecture refactor

Description of changes
Begin preparing the codebase for a model that supports decoupled reads and writes.

[x] Update config system to allow dependency injection via class name
[x] Split the chromadb.db.DB interface into separate interfaces for the System DB and Metadata DB
[x] Update DB method signatures to support append-only and soft delete
[ ] Refactor chromadb.api.local.LocalAPI to utilize new interfaces
[ ] Provide concrete implementations for all interfaces as needed to replicate current library-only and single server deployment models

Interfaces & Data Flow
Dotted lines represent communications that will be moved out-of-process in a distributed deployment.

Test plan
Unit and integration tests continue to pass.
Documentation Changes
TBD on how much we should try to mitigate breaking changes. The user-facing API can remain 100% consistent, however the schema for the DuckDB and Clickhouse databases may need to change in breaking ways. We do not yet have a system for DB migrations or versioned schema.

@HammadB just bouncing something off you. Most the code up until now presumes either UUIDs or strings for embedding IDs.
Managing multiple types across multiple databases was super cumbersome, so I went ahead and switched everything to the lowest common denominator (strings).
If we really want to save space, we can still store UUIDs as base85 strings, meaning they can be saved as 160 bits which isn't too much worse than their native 128.
Given that embedding IDs only truly need to be unique within a collection/segment, I think strings are an OK choice.
LMK what you think.

I still prefer if we use the underlying number representation in the places
that support it but perhaps a needless optimization. If we need to do
seq-scan equivalents over the id we also benefit from vectorized
comparisons.
Will leave it up to you as I don’t know if it’ll matter much at all, and is
unlikely.
We can leave it as strings if it’s easier now. Out of curiosity what’s the
support for storing UIIDs like across the various DBs?
On Mon, Mar 13, 2023 at 6:46 AM Luke VanderHart @.***>
wrote:

@HammadB https://github.com/HammadB just bouncing something off you.
Most the code up until now presumes either UUIDs or strings for embedding
IDs.
Managing multiple types across multiple databases was super cumbersome, so
I went ahead and switched everything to the lowest common denominator
(strings).
If we really want to save space, we can still store UUIDs as base85
strings, meaning they can be saved as 160 bits which isn't too much worse
than their native 128.
Given that embedding IDs only truly need to be unique within a
collection/segment, I think strings are an OK choice.
LMK what you think.
—
Reply to this email directly, view it on GitHub
https://github.com/chroma-core/chroma/pull/214#issuecomment-1466172783,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABKW32M7B2MR6B27V6SBP7TW34QJ5ANCNFSM6AAAAAAVYNBMVI
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Hammad Bashir
EECS | Cal

@HammadB most DBs have a dedicated UUID type or at least fixed-length binary data (which is effectively the same.) Strangely though, CrateDB is not one of them: we'd have to encode a UUID as a string to store it there anyway.

Top level question - how are segment types assigned to collections? Are you imagining it as a data-responsive process in the placement engine - thats what I am assuming, so want to confirm.

Top level question - how are segment types assigned to collections? Are you imagining it as a data-responsive process in the placement engine - thats what I am assuming, so want to confirm.

I see this as the primary axis along which the system will evolve.
We'll start very simple: one segment per collection, assigned locally in one of the impls (probably the stream reader).
Eventually we'll have the full distributed architecture with a dedicated supervisor process creating segments for different partitions/shards dynamically in response to load, tuning parameters and user hints.
There will probably be some steps in between too.
In all cases the SysDB will be the source of truth about what segments exist and where reads and writes should be directed.

Closing because this is too big and too far out of date. Going to re-create using smaller PRs.


Conditional Access Policy for Azure AD joined devices

Hi,
On the article there is a note informing that for devices which are only Azure AD joined to consider using a Conditional Access Policy instead.
Can you clarify how can this be achieved?
Is possible to 100% mimic the OneDrive Policy for Azure AD joined devices through a Conditional Access Policy?
If not can you change the article to be more clear on that part.
Thank you.

@Nuno83 Please link the article you are referring to. Thanks!

@scanum This is the article that I was referring to https://docs.microsoft.com/en-us/onedrive/allow-syncing-only-on-specific-domains. Sorry that I didn't referred to it earlier. Thank you.

Hello @Nuno83 how are you?
Thanks for including the article you were referring to.
To my understanding, the use of a conditional access policy is (quoting the article) To make sure that users sync OneDrive files only on managed computers so you can find more information on how to set up a CP, in this article for example:
https://docs.microsoft.com/en-us/onedrive/enable-conditional-access
And OneDrive is included in the Office 365 client app
https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-cloud-apps#office-365-preview
Does this answer your question?
Thank you

Hi @get-itips thank you for the fast reply.
I will provide this information to my team and verify if it is what we were looking for.
Thank you and Merry Christmas.

To you too!


Make OriginateResponse inherit ManagerReponse

All manager responses inherit ManagerResponse except OriginateResponse. Since OriginateResponse is also a manager response, this PR will make it inherit from ManagerResponse. This is to allow generic methods that expect ManagerResponse derived classe to accept OriginateResponse as well.
Addresses https://github.com/AsterNET/AsterNET/issues/268

Does this even compile? I see private string uniqueId; exist in both and you did not delete it in OriginateResponse.

It does compile with a warning about shadowing the public string UniqueId but I should indeed fix that.

OriginateResponse now inherit IParseSupport through ManagerResponse, does this cause any issues?

This will attempt to automatically parse attributes if any.

ManagerResponse has a bunch more properties, are they supplied the AMI's OriginateResponse event? Doesn't look like it has all of them, see: https://wiki.asterisk.org/wiki/display/AST/Asterisk+16+ManagerEvent_OriginateResponse It it ok for it to have some of those missing?

The asterisk reference is more relevant to AsterNET.Manager.Event.OriginateResponseEvent. The ManagerResponse adds properties related to how AsterNET deals with the messaging and not so much attributes that AMI would send. To be honest I'm not 100% sure what is the difference between the two OriginateResponse and the OriginateResponseEvent

Basically just a bunch of possible consequences you haven't mentioned. And I don't have the time to check all of them at the moment.

You are absolutely right. Those side effects should be tested for. I've already merged this into our project but I'm yet to do intensive testing with originating calls.
I'll convert the PR to a draft and will reopen it (or close it) after I do some more tests. I will post updates here.
Meanwhile please, do not close #268. If it turns out things break, I'll post an answer there.

The project using AsterNET has been discontinued so I won't be able to perform the tests mentioned above. I'll mark the PR as ready for review in case someone run against the same issue and would like to test the proposed solution.


Add fromStorageUrl and toStorageUrl methods to BlobId

See this issue for context: https://github.com/GoogleCloudPlatform/google-cloud-java/issues/2363

why its not yet developed.

Past second quarter of 2019 and still not implemented

This issue seems to have been removed from the feature backlog 18 days ago with comment Clean up: Moving Cloud Storage requests to respective backlogs..
However I am unable to find the "feature backlog" for Cloud Storage and hence any reference to this issue.

Middle of 2021 ... was it implemented?

Opened ^^^ in the new repository. I'm no longer working on the libraries but please follow the issue above for updates.


Question - Why does Viewport.zoomTo not apply maxZoom/minZoom constraints?

The zoom event is raised even when already at minZoom or maxZoom. Additionally, by adding some breakpoints I see that the zoom does occur, but is followed by another zoom event that sets it back to the constrained value. Wouldn't it be better to prevent the zoom event from being raised when the zoomTo value is smaller/greater than min/max zoom?
The multiple 'zoom' events raised make it confusing to use a zoom event handler.
Suggestion:
  // $.Viewport.zoomTo

  zoomTo: function( zoom, refPoint, immediately ) {
    // check zoom constraints
    var minZoom = this.getMinZoom();
    var maxZoom = this.getMaxZoom();
    if ( zoom < minZoom || zoom > maxZoom ) {
      // zooming beyond constraints, quit early and do not raise zoom event
      return this;
    }

    this.zoomPoint = refPoint instanceof $.Point &&
      !isNaN(refPoint.x) &&
      !isNaN(refPoint.y) ?
      refPoint :
      null;

    // ...

Yes, currently zoomTo does not apply any constraints itself... that means you can manually zoom beyond the constraints. The constraints are applied at the UI level (i.e. when you hit a button). If we change that behavior, it's possible we could break someone's app, but it's still worth considering... maybe calling zoomTo should be able to apply constraints; I'm open to thoughts on that. If we do put constraints directly into zoomTo, we'll need to also be able to disable them, since the constraints code itself may call zoomTo.
Of course for your scenario it sounds like continuing to apply the constraints at the UI level would be fine, as long as we applied them ahead of time rather than after the zoom call. That seems reasonable, but keep in mind that there are also pan constraints that could be triggered by zooming (e.g. if zooming out reveals too much empty space). Perhaps it's okay to ignore those with the preflight check and just focus on min/max zoom, though.
Also, if we do min/max zoom constraints like this, the logic should be more like:
var newZoom = Math.max(this.getMinZoom(), Math.min(this.getMaxZoom(), zoom));
if (newZoom === this.zoomSpring.target.value && (!immediately || newZoom === this.zoomSpring.current.value)) {
    return this;
}

... so that you won't abort zooms that should at least partially happen.
Anyway, I guess the short answer is that doing the constraints afterwards cuts down on code complexity, but I'm open to ways to improve the situation.


[Request] Add try/except to parsing _Compound.from_xml_node

Occasionally parsing the IUPAC name fails. I'd like for dataset creation to continue and skip that molecule, rather than completely dying. Things it has died on:

"graphite"
"(.+-.)-cis-3-hexenyl 2-methylbutyrate"

from DOIs (all from this bib file https://github.com/openforcefield/release-1-benchmarking/blob/master/physical_properties/physprop-benchmark-sources.bib):

10.1021/je025641j
10.1016/j.jct.2015.02.015

Relevant code in thermoml.py:
        if (
            smiles is None
            and len(common_identifier_nodes) > 0
            and common_identifier_nodes[0].text is not None
        ):
            # Convert the common name to a smiles pattern.
+++         try:
                smiles = cls.smiles_from_common_name(common_identifier_nodes[0].text)
+++         except:
                return None  # or fall through to the logging if below

Thanks for raising this @lilyminium - looking over the code a bit it seems that smiles_from_common_name should be returning None already when either a value or license error is raised by the TK.
I'm not able to reproduce the issue you're hitting locally. I tried doing:
ThermoMLDataSet.from_doi("10.1021/je025641j")
ThermoMLDataSet.from_doi("10.1016/j.jct.2015.02.015")

and both lines complete just fine. Could you give more information about the error you're seeing?

Hi @SimonBoothroyd, thanks for looking into it. That's interesting that they complete fine for you -- I get an InvalidIUPACNameError. In general I seem to be getting different results from previous scripts, e.g. most of the DOI sources in that bib file do not give me pressure values, even though I see pressure values in the curated data files created from said sources. 😣
>>> from openff.evaluator.datasets.thermoml import ThermoMLDataSet
>>> from openff import evaluator
>>> evaluator.__version__
'v0.3.4'
>>> import openeye
>>> openeye.__version__
'2021.1.1'
>>> ThermoMLDataSet.from_doi("10.1021/je025641j")
---------------------------------------------------------------------------
InvalidIUPACNameError                     Traceback (most recent call last)
/var/folders/rv/j6lbln6j0kvb5svxj8wflc400000gn/T/ipykernel_46879/83891729.py in <module>
----> 1 ThermoMLDataSet.from_doi("10.1021/je025641j")

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/evaluator/datasets/thermoml/thermoml.py in from_doi(cls, *doi_list)
   2102             doi_url = f"https://trc.nist.gov/ThermoML/{doi}.xml"
   2103
-> 2104             data_set = cls._from_url(doi_url, MeasurementSource(doi=doi))
   2105
   2106             if data_set is None or len(data_set) == 0:

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/evaluator/datasets/thermoml/thermoml.py in _from_url(cls, url, source)
   2176                 raise HTTPError(url, 404, "Not found", None, None)
   2177
-> 2178             return_value = cls.from_xml(request.text, source)
   2179
   2180         except HTTPError:

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/evaluator/datasets/thermoml/thermoml.py in from_xml(cls, xml, default_source)
   2293         for node in root_node.findall("ThermoML:Compound", namespace):
   2294
-> 2295             compound = _Compound.from_xml_node(node, namespace)
   2296
   2297             if compound is None:

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/evaluator/datasets/thermoml/thermoml.py in from_xml_node(cls, node, namespace)
    515         ):
    516             # Convert the common name to a smiles pattern.
--> 517             smiles = cls.smiles_from_common_name(
    518                 common_identifier_nodes[0].text)
    519

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/evaluator/datasets/thermoml/thermoml.py in smiles_from_common_name(common_name)
    448         try:
    449
--> 450             molecule = Molecule.from_iupac(
    451                 common_name, allow_undefined_stereo=True)
    452             cmiles_molecule = load_molecule(

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/toolkit/topology/molecule.py in from_iupac(cls, iupac_name, toolkit_registry, allow_undefined_stereo, **kwargs)
   4574         """
   4575         if isinstance(toolkit_registry, ToolkitRegistry):
-> 4576             molecule = toolkit_registry.call(
   4577                 "from_iupac",
   4578                 iupac_name,

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/toolkit/utils/toolkit_registry.py in call(self, method_name, raise_exception_types, *args, **kwargs)
    365                     for exception_type in raise_exception_types:
    366                         if isinstance(e, exception_type):
--> 367                             raise e
    368                     errors.append((toolkit, e))
    369

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/toolkit/utils/toolkit_registry.py in call(self, method_name, raise_exception_types, *args, **kwargs)
    361                 method = getattr(toolkit, method_name)
    362                 try:
--> 363                     return method(*args, **kwargs)
    364                 except Exception as e:
    365                     for exception_type in raise_exception_types:

~/anaconda3/envs/polymetrizer/lib/python3.9/site-packages/openff/toolkit/utils/openeye_wrapper.py in from_iupac(self, iupac_name, allow_undefined_stereo, _cls, **kwargs)
   1634         parsing_result = oeiupac.OEParseIUPACName(oemol, iupac_name)
   1635         if not parsing_result:
-> 1636             raise InvalidIUPACNameError(
   1637                 f"OpenEye failed to parse {iupac_name} as a IUPAC name"
   1638             )

InvalidIUPACNameError: OpenEye failed to parse graphite as a IUPAC name

Ah great - thanks for the extra info! It seems at some point in the past the TK added a custom exception that evaluator doesn't expect.
I'll make sure this is properly caught in the next release.

e.g. most of the DOI sources in that bib file do not give me pressure values, even though I see pressure values in the curated data files created from said sources.

because it was not specified in the ThermoML files, an assumption was made that using a pressure of 1 atm for the simulations should be fine and the dataset was manually updated with a pressure


Gitter markdown tag on README.

Checklist

[ ] New Extension
[ ] New Test
[ ] Changed more than one extension, but all changes are related
[x] Trivial change (doesn't require changelog)

          2 Messages

:book:
Executed 157 tests, with 0 failures (0 unexpected) in 6.383 (6.631) seconds

:book:
Executed 145 tests, with 0 failures (0 unexpected) in 9.178 (9.371) seconds

  Generated by :no_entry_sign: danger


Implement buttons for Mattermost channel

Description of Problem:

Buttons in Mattermost appear currently only as text message, not as clickable buttons. See also
this thread in the forum.
Overview of the Solution:

Changes are necessary in

rasa\core\channels\mattermost.py

Implement send_text_with_buttons() in MattermostBot class according to mattermost message buttons docs
Initialize MattermostBot and MattermostInput with an additional parameter webhook_url

rasa\cli\initial_project\credentials.yml (not really necessary, but very helpful for an easy start)

add Mattermost example with additional webhook_url

Examples (if relevant):

Current state:

Future state:

Blockers (if relevant):

Definition of Done:

[ ] Tests are added
[ ] Feature described the doc
[ ] Feature mentioned in the changelog

Thanks for submitting this feature request 🚀@tabergma will get back to you about it soon!✨

Sounds like a good addition! Do you want to add this yourself and open a PR for it?

Sounds like a good addition! Do you want to add this yourself and open a PR for it?

The PR is already created: https://github.com/RasaHQ/rasa/pull/4456


fix: double FOX farming balances

Description

Notice

[ ] Have you followed the guidelines in our Contributing guide?
[ ] Have you checked to ensure there aren't other open Pull Requests for the same update/change?

Pull Request Type

[ ] :bug: Bug fix (Non-breaking Change: Fixes an issue)
[ ] :hammer_and_wrench: Chore (Non-breaking Change: Doc updates, pkg upgrades, typos, etc..)
[ ] :nail_care: New Feature (Breaking/Non-breaking Change)

Issue (if applicable)

closes #
Risk

Testing

Engineering

Operations

Screenshots (if applicable)

Current dependencies on/for this PR:

develop

PR #3301   👈

PR #3302

This comment was auto-generated by Graphite.