Определение времени работы внутренних линий — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
Задача: Мониторинг состояния внутренних линий и определение времены работы внутренних линий.  
 
Задача: Мониторинг состояния внутренних линий и определение времены работы внутренних линий.  
  
Задача становится актуальной, когда операторы системы не используют клиентских приложений, а установлены как "пользователь по умолчанию" для своего телефона. В этом случае в базу данных Oktell, информация о разрегистрации линии не заносится и проверка работы линий доступна только с помощью клиентского приложения.
+
Задача становится актуальной, когда операторы системы не используют клиентских приложений, а установлены как "пользователь по умолчанию" для своего телефона. В базу данных Oktell информация о разрегистрации линии не заносится и проверка работы линий доступна только с помощью клиентского приложения (модуль "'''Мониторинг'''"), что является не очень удобным.  
  
Сценарий выглядит следующим образом:
+
Следовательно, необходимо создать сценарий, который будет проверять состояние линий и вести статистику о времени работы каждой линии, а следовательно и пользователя системы. Сценарий выглядит следующим образом:
  
 
[[Файл:РаботаВнутреннихЛиний-001.png | center]]
 
[[Файл:РаботаВнутреннихЛиний-001.png | center]]
Строка 26: Строка 26:
 
  set @res=@@rowcount
 
  set @res=@@rowcount
  
[[Файл:РаботаВнутреннихЛиний-002.png]]
+
Запрос использует таблицу:  
  
 +
* [oktell_settings].[dbo].[A_ServerSipLines] — столбец SystemNumStr показывает номера внутренних SIP линий, определенных в системе.
 +
 +
Однако вы также можете использовать таблицы:
 +
 +
* [oktell_settings].[dbo].[A_ServerUSBLines] — столбец SystemNumStr показывает номера внутренних Voip линий (гарнитура или usb телефон).
 +
 +
* [oktell_settings].[dbo].[A_ServerExtLines] — столбец SystemNumStr показывает номера внешних SIP линий
  
 
3. Компонент "Проверка на завершение". Определяет конец цикла (был осуществлен перебор всех линий). Сравнение переменной res с нулем.  
 
3. Компонент "Проверка на завершение". Определяет конец цикла (был осуществлен перебор всех линий). Сравнение переменной res с нулем.  
Строка 68: Строка 75:
 
11. Компонент "Оповещение". Происходит уведомление администратора системы о том, что внутренняя линия выключена.  
 
11. Компонент "Оповещение". Происходит уведомление администратора системы о том, что внутренняя линия выключена.  
  
 +
В работе используется таблица Lines в [Oktell].[dbo].[Lines]. Запрос для создания таблицы (выполняется в SSMS)
  
 
+
USE [oktell]
В данной статье обсуждается вопрос о работе линий, работающих по SIP. Сценарий использует таблицу:
+
GO
 
+
SET ANSI_NULLS ON
* [oktell_settings].[dbo].[A_ServerSipLines] — столбец SystemNumStr показывает номера внутренних SIP линий, определенных в системе.
+
GO
 
+
Вы можете использовать также:
+
SET QUOTED_IDENTIFIER ON
 
+
GO
* [oktell_settings].[dbo].[A_ServerUSBLines] — столбец SystemNumStr показывает номера внутренних Voip линий (гарнитура или usb телефон).
+
 
+
CREATE TABLE [dbo].[Lines](
* [oktell_settings].[dbo].[A_ServerExtLines] — столбец SystemNumStr показывает номера внешних SIP линий
+
[Id] [int] IDENTITY(1,1) NOT NULL,  
 +
[Line] [nvarchar](2000) NULL,
 +
[User] [nvarchar](2000) NULL,
 +
[Status] [nvarchar](2000) NULL,
 +
[Online] [datetime] NULL,
 +
[Offline] [datetime] NULL,
 +
[date] [datetime] NULL,
 +
[datetime] [datetime] NULL,
 +
PRIMARY KEY CLUSTERED
 +
(
 +
[Id] ASC
 +
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
 +
) ON [PRIMARY]
 +
 +
GO

Версия 11:11, 14 января 2014

Задача: Мониторинг состояния внутренних линий и определение времены работы внутренних линий.

Задача становится актуальной, когда операторы системы не используют клиентских приложений, а установлены как "пользователь по умолчанию" для своего телефона. В базу данных Oktell информация о разрегистрации линии не заносится и проверка работы линий доступна только с помощью клиентского приложения (модуль "Мониторинг"), что является не очень удобным.

Следовательно, необходимо создать сценарий, который будет проверять состояние линий и вести статистику о времени работы каждой линии, а следовательно и пользователя системы. Сценарий выглядит следующим образом:

РаботаВнутреннихЛиний-001.png

Структурно сценарий состоит из

1. Компонент "Начальные параметры". Заданы параметры - начальное значение для поиска внутренних линий и текущая дата.

2. Компонент "Находим линию". Определяет следующую по порядку внутреннюю SIP линию по столбцу systemnumstr. В качестве выходных параметров запрос выдает res - результат запроса (1- найдена линия, 0 -не найдена), systemnumstr - номер внутренней линии.

declare @min int
select @min = min(systemnumstr)
from [oktell_settings].[dbo].[A_ServerSipLines]
where systemnumstr>@systemnumstr_before

if (@min is not null)
select @systemnumstr=@min

set @res=@@rowcount

Запрос использует таблицу:

  • [oktell_settings].[dbo].[A_ServerSipLines] — столбец SystemNumStr показывает номера внутренних SIP линий, определенных в системе.

Однако вы также можете использовать таблицы:

  • [oktell_settings].[dbo].[A_ServerUSBLines] — столбец SystemNumStr показывает номера внутренних Voip линий (гарнитура или usb телефон).
  • [oktell_settings].[dbo].[A_ServerExtLines] — столбец SystemNumStr показывает номера внешних SIP линий

3. Компонент "Проверка на завершение". Определяет конец цикла (был осуществлен перебор всех линий). Сравнение переменной res с нулем.

4. Компонент "id_before = id_after". Переприсваивает переменную для поиска следующей sip линии на следующем цикле.

5. Компонент "Статус линии". Определяет состояние линии по ее номеру и записывает в переменную status.

6. Компонент "Идентификатор пользователя". Определяет пользователя, контролирующего линию ("Пользователь по умолчанию" или логически связанный пользователь), и записывает его в переменную user.

7. Компонент "Определяем пользователя по умолчанию". Используется SQL запрос, определяющий по идентификатору пользователя его имя.

select @name=name from a_users where ID =@id

8. Компонент "Определяем статус линии". В компоненте определяется состояние линии по ее статусу - включена или выключена. В сценарии, линия считается выключенной если ее статус = 1 ( не подключена) или 1024 (не определена). Более подробно по статусам вы можете прочитать Общие компоненты сценариев

9. Компонент "Линия включена". В компоненте происходит запись информации в таблицу работы линий. Если записи о линии нет, она будет создана. Если запись есть, то она будет обновлена.

ВНИМАНИЕ: В запросе делается предположение, что если линия на момент проверки работает, значит она работала все предыдущее время со времени последней проверки.

update Lines 
set Line=@line, 
status=@status,
datetime= getdate(),
online = online+ getdate()- [datetime]
where date= @date and line=@line

if (@@rowcount=0)
insert into Lines (Line, status, date, online, offline, [datetime], [user]) values
(@line,
@status,
@date,
dateadd(mi, 0, '1990-01-01'),
dateadd(mi, 0, '1990-01-01'),
getdate(),
@user)

10. Компонент "Линия выключена". Запрос аналогичен выше описанному SQL запросу, за исключением того, что время суммируется к столбцу offline.

11. Компонент "Оповещение". Происходит уведомление администратора системы о том, что внутренняя линия выключена.

В работе используется таблица Lines в [Oktell].[dbo].[Lines]. Запрос для создания таблицы (выполняется в SSMS)

USE [oktell]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Lines](
	[Id] [int] IDENTITY(1,1) NOT NULL, 
	[Line] [nvarchar](2000) NULL,
	[User] [nvarchar](2000) NULL,
	[Status] [nvarchar](2000) NULL,
	[Online] [datetime] NULL,
	[Offline] [datetime] NULL,
	[date] [datetime] NULL,
	[datetime] [datetime] NULL,
PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO