Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Memory leak problems #154

Open
wifono opened this issue Nov 23, 2023 · 0 comments
Open

Memory leak problems #154

wifono opened this issue Nov 23, 2023 · 0 comments

Comments

@wifono
Copy link

wifono commented Nov 23, 2023

Hello. I'm developing app, where I fetch events from Outlook with EWS/Graph ... With MS Graph, everything works well, but when I use EWS, memory and heap usage are increasing, and then I got error that heap is out of memory....

I tried to solve this problem with this solution, but my problem is not solved.... My problem is, that my app fetches events from calendars every 10 seconds. When I disable cron, everything works well and memory and heap are at low numbers ... But I need that cron to do his job....

This is part of my code that is responsible for fetching events....

` if (settings.ews === '1') {
const roomService = new MeetingRoomsManagmentService({
Model: app.get('mssqlClient'),
name: 'meeting_rooms'
})
const rooms = await roomService.find()
const roomEmails = rooms.map((room) => room.mroomEmail)

    const configService = new EwsConfigService({
      Model: app.get('mssqlClient'),
      name: 'ews_config'
    })

    const config = await configService.find()

    const currentDate = new Date()
    const currentDayOfWeek = currentDate.getDay()
    const currentDayOfMonth = currentDate.getDate()
    const startOfWeek = new Date(currentDate)
    startOfWeek.setDate(currentDayOfMonth - currentDayOfWeek + 1)
    startOfWeek.setHours(2, 0, 0, 0)
    const endOfWeek = new Date(currentDate)
    endOfWeek.setDate(currentDayOfMonth + (6 - currentDayOfWeek))
    endOfWeek.setHours(25, 59, 59, 999)

    const ewsConfig = {
      username: config[0].mail,
      host: 'https://outlook.office365.com/',
      auth: 'bearer',
      token: globalAccessToken,
      temp: '/tmp'
    }

    const ews = new EWS(ewsConfig)
    const ewsFunction = 'FindItem'
    const ewsArgs = {
      attributes: {
        Traversal: 'Shallow'
      },
      ItemShape: {
        BaseShape: 'Default'
      },
      ParentFolderIds: {
        DistinguishedFolderId: {
          attributes: {
            Id: 'calendar'
          }
        }
      },
      CalendarView: {
        attributes: {
          StartDate: startOfWeek.toISOString(),
          EndDate: endOfWeek.toISOString()
        }
      }
    }
    const formattedEvents = []

    for (let i = 0; i < roomEmails.length; i++) {
      const email = roomEmails[i]
      const ewsSoapHeader = {
        't:ExchangeImpersonation': {
          't:ConnectingSID': {
            't:SmtpAddress': email
          }
        }
      }

      try {
        const result = await ews.run(ewsFunction, ewsArgs, ewsSoapHeader)
        const rootFolder = result.ResponseMessages.FindItemResponseMessage.RootFolder

        if (rootFolder && rootFolder.Items && rootFolder.Items.CalendarItem) {
          const calendarEvents = Array.isArray(rootFolder.Items.CalendarItem)
            ? rootFolder.Items.CalendarItem
            : [rootFolder.Items.CalendarItem]

          for (const event of calendarEvents) {
            if (!event || !event.ItemId) {
              continue
            }

            const formattedEvent = {
              event_id: event.ItemId.attributes.Id,
              changeKey: event.ItemId.attributes.ChangeKey,
              event_subject: event.Subject,
              event_start: dateTime(event.Start).toString(),
              event_end: dateTime(event.End).toString(),
              event_location: event.Location,
              event_organizer: email,
              event_organizer_name: event.Organizer.Mailbox.Name
            }

            formattedEvents.push(formattedEvent)
          }
        }
      } catch (error) {
        console.error('Error fetching calendar events for email:', email, error)
      }
    }

    return formattedEvents
  }`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant