# Charts that don't work all the time

**URL:** <https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579>\
**Category:** Help me!\
**Created:** [August 21, 2023, 1:49pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579 "2023-08-21T13:49:50Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 21, 2023, 1:49pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/1 "2023-08-21T13:49:50Z")

</div>

Hello 👋

## Feature(s) impacted

Dashboard, chart

## Observed behavior

In our dashboard in the Production environment we have several charts, but there are times when the charts are no longer displayed.  
For example, here:

 ![image](https://europe1.discourse-cdn.com/flex013/uploads/forest/original/2X/5/5815d7887b72d6a2948b76cfd6d285a3fac71926.png)

But sometimes when I refresh it works and other charts don’t work anymore.  
Also, in the Staging and Preprod environments, all charts work.

## Expected behavior

Before there were no display problems, would you have idea for this problem ?

## Context

- Project name: Nostrum Care v2
- Team name: Operation
- Environment name: Production
- Agent (forest package) name & version: “forest-express-sequelize”: “^8.0.0”
- Database type: Postgres

Thank you in advance

---

<div class="post-metadata">

**Author:** ![nbouliol](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/nbouliol/32/5777_2.png) [@nbouliol](https://community.forestadmin.com/u/nbouliol)\
**Post date:** [August 21, 2023, 2:02pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/2 "2023-08-21T14:02:14Z")

</div>

Hello @jacques_liao,

Do you have any error logs on the browser or on the agent side while encountering this kind of issue ?

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 21, 2023, 2:11pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/3 "2023-08-21T14:11:53Z")

</div>

Hello @nbouliol,

 ![image](https://europe1.discourse-cdn.com/flex013/uploads/forest/original/2X/1/1dfa3270f27c2fe7c5fa50df6a69751a4736e5b9.png)  
then I don’t get an error log.

---

<div class="post-metadata">

**Author:** ![nbouliol](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/nbouliol/32/5777_2.png) [@nbouliol](https://community.forestadmin.com/u/nbouliol)\
**Post date:** [August 22, 2023, 9:08am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/4 "2023-08-22T09:08:07Z")

</div>

Hello @jacques_liao

On which kind of charts (simple / query / api) are you seeing the cors issue ?

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 23, 2023, 7:29am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/5 "2023-08-23T07:29:11Z")

</div>

Hello @nbouliol  
On charts api

---

<div class="post-metadata">

**Author:** ![nbouliol](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/nbouliol/32/5777_2.png) [@nbouliol](https://community.forestadmin.com/u/nbouliol)\
**Post date:** [August 23, 2023, 10:10am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/6 "2023-08-23T10:10:40Z")

</div>

Thank you

> Before there were no display problems

Did you make recent changes ?

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 23, 2023, 11:31am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/7 "2023-08-23T11:31:53Z")

</div>

No, we haven’t made any recent changes

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 24, 2023, 9:28am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/8 "2023-08-24T09:28:15Z")

</div>

And I have this error in console

`POST https://prd......?timezone=Europe%2FParis net::ERR_FAILED 504 (Gateway Time-out)`

Could this problem be due to our servers?

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 25, 2023, 7:33am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/9 "2023-08-25T07:33:06Z")

</div>

Hello, do you have any news ?

---

<div class="post-metadata">

**Author:** ![nbouliol](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/nbouliol/32/5777_2.png) [@nbouliol](https://community.forestadmin.com/u/nbouliol)\
**Post date:** [August 25, 2023, 1:51pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/10 "2023-08-25T13:51:58Z")

</div>

Hello @jacques_liao

Sorry for the delay

Yes, I think your server returning 504 error might be the issue

Nicolas

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 28, 2023, 8:37am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/11 "2023-08-28T08:37:20Z")

</div>

Hello @nbouliol  
We check on our side.

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [August 30, 2023, 1:11pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/12 "2023-08-30T13:11:51Z")

</div>

Hello @nbouliol,

We checked on our side and there were no problems in our servers. Could this be linked to our Cors configuration?

I added an allowedHeaders :

```js
allowedHeaders: ['Forest-Context-Url', 'Authorization', 'X-Requested-With', 'Content-Type'],

```

```js
const corsConfig = {
  origin: allowedOrigins,
  allowedHeaders: ['Forest-Context-Url','Authorization', 'X-Requested-With', 'Content-Type'],
  maxAge: 86400, // NOTICE: 1 day
  credentials: true,
};

```

But it doesn’t work

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [September 1, 2023, 8:40am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/13 "2023-09-01T08:40:20Z")

</div>

Hello,  
do you have any news?

---

<div class="post-metadata">

**Author:** ![nbouliol](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/nbouliol/32/5777_2.png) [@nbouliol](https://community.forestadmin.com/u/nbouliol)\
**Post date:** [September 5, 2023, 7:32am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/14 "2023-09-05T07:32:36Z")

</div>

Hello @jacques_liao

I am trying to reproduce your issue, I’m coming back to you when I found what is happening

---

<div class="post-metadata">

**Author:** ![nbouliol](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/nbouliol/32/5777_2.png) [@nbouliol](https://community.forestadmin.com/u/nbouliol)\
**Post date:** [September 5, 2023, 8:53am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/15 "2023-09-05T08:53:35Z")

</div>

Can you please share with me the code of one of the failing charts ?

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [September 6, 2023, 2:09pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/16 "2023-09-06T14:09:17Z")

</div>

Yes

```js
router.post('/subscription/nv/amountByYears/byWeeks', async (req, res) => {
    try {
        const contracts = await nvContracts.findAll();
        const beneficiariesList = await beneficiaries.findAll();
        let contractAmountsTotal = 0;
        let countNvBeneficiaries = 0;
        let values = [];
        const dateNow = moment().format();
        const startDate = moment("22/06/2023", 'DD/MM/YYYY').format();
        let date = startDate;
        let dateGraph;
        let allContractNvAmountDivideByNvBeneficiaries = 0;
        // add 7 days in startDate while startDate is before or same date now
        while (moment(date).isSameOrBefore(dateNow)) {
            date = moment(date).add(7, 'days');
            values.push({ label: date, values: { value: 0 } });
        }

        for (const valueIndex in values) {
            // check if actual date is before or same in date
            if (moment(values[valueIndex].label).isSameOrBefore(dateNow)) {
                dateGraph = values[valueIndex].label
                while (moment(dateGraph).isSameOrBefore(dateNow)) {
                    for (const contract of contracts) {
                        const createdAtMoment = moment(contract.createdAt, 'DD/MM/YYYY').format();
                        // check if actual beneficiary contract is before or same in date
                        if (moment(createdAtMoment).isSameOrBefore(dateGraph, "days")) {
                            // recover amounts from all nv contracts
                            if (contract.amount) {
                                // add up all the amounts then total * 12
                                contractAmountsTotal += contract.amount * 12;
                            }
                            for (const beneficiary of beneficiariesList) {
                                // ccount beneficiaries nv
                                if (beneficiary.fkUserIdKey === contract.fkUserId) {
                                    countNvBeneficiaries += 1;
                                }
                            }
                        }
                    }
                    // All nv contract amount divide by nv beneficiaries
                    allContractNvAmountDivideByNvBeneficiaries += contractAmountsTotal / (countNvBeneficiaries - 1);
                    dateGraph = moment(dateGraph).add(1, 'days').format();
                }
                let index = values.findIndex(obj => moment(obj.label).format('YYYY-MM-DD') === moment(values[valueIndex].label).format('YYYY-MM-DD'));
                if (index != undefined) {
                    values[index].values.value += allContractNvAmountDivideByNvBeneficiaries;
                }
                contractAmountsTotal = 0;
                countNvBeneficiaries = 0;
                allContractNvAmountDivideByNvBeneficiaries = 0;
            } else {
                allContractNvAmountDivideByNvBeneficiaries = 0;
                let index = values.findIndex(obj => moment(obj.label).format('YYYY-MM-DD') === moment(values[valueIndex].label).format('YYYY-MM-DD'));
                if (index != undefined) {
                    values[index].values.value += allContractNvAmountDivideByNvBeneficiaries;
                }
            }
        }
        let json = new Liana.StatSerializer({
            value: values
        }).perform();
        return res.send(json);
    } catch (error) {
        console.error(`Error while count nv beneficiaries by weeks, error : ${error}`);
        throw error;
    }
});

```

---

<div class="post-metadata">

**Author:** ![nbouliol](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/nbouliol/32/5777_2.png) [@nbouliol](https://community.forestadmin.com/u/nbouliol)\
**Post date:** [September 8, 2023, 2:24pm UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/17 "2023-09-08T14:24:21Z")

</div>

Hello @jacques_liao

I think your charts don’t render because of the gateway timeout, the CORS is not the issue here

For performance reasons, you should avoid using `findAll` on your collection and iterating over all your datas.

Maybe you should consider getting the contracts and beneficiaries after the `startDate`

```javascript
  const startDate = moment("22/06/2023", 'DD/MM/YYYY').format(); 
  const contracts = await nvContracts.findAll({where: {[Op.gte]}: startDate});
  const beneficiariesList = await beneficiaries.findAll({where: {[Op.gte]}: startDate});

```

---

<div class="post-metadata">

**Author:** ![jacques\_liao](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/jacques_liao/32/3723_2.png) [@jacques\_liao](https://community.forestadmin.com/u/jacques_liao)\
**Post date:** [September 13, 2023, 7:42am UTC](https://community.forestadmin.com/t/charts-that-dont-work-all-the-time/6579/18 "2023-09-13T07:42:26Z")

</div>

> [@nbouliol](#):
>
> ```javascript
> const contracts = await nvContracts.findAll({where: {[Op.gte]}: startDate});
> const beneficiariesList = await beneficiaries.findAll({where: {[Op.gte]}: startDate});
> 
> ```

Hello @nbouliol  
Yes, it’s for performance reasons because of the `for` and `while` loops.  
Thanks for the help, I’ll try to optimize on our side. 👍
